如何忽略 Windows 中的鼠标点击? (C++)
How to ignore a mouse click in Windows? (C++)
我正在尝试制作一个可以忽略鼠标点击的后台程序 - 在程序之外。
如何通过 C++ 告诉 Windows 这个?
我已经让程序识别鼠标点击。只是不知道如何忽略它。
我需要这样做的原因是因为我的鼠标有一个缺陷,当我只单击一次时它会意外双击(或更多)。
所以基本上,当程序注册我用鼠标单击时,它会让第一次单击通过,但随后禁用该按钮(忽略每次后续单击)约 200 毫秒。
如果可能,我想避免使用任何外部库。只有 Visual Studio.
附带的标准
非常感谢您的阅读!
您可以使用 low-level mouse hook:
// Variable to store the hook handle
HHOOK miHook;
// This is the hook procedure
LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam) {
if(nCode == HC_ACTION) {
MSLLHOOKSTRUCT &msll = *(reinterpret_cast<MSLLHOOKSTRUCT*>(lParam)); // In there is more context if you need it
if(wParam == WM_LBUTTONDOWN) {
// Do your logic here
if(letsIgnoreThisClick) {
return -1; // This will make the click be ignored
}
}
}
return CallNextHookEx(miHook, nCode, wParam, lParam); // Important! Otherwise other mouse hooks may misbehave
}
// This is how you install the hook
miHook = SetWindowsHookEx(WH_MOUSE_LL, reinterpret_cast<HOOKPROC>(&LowLevelMouseProc), hInstance, 0);
// And this is how you would remove the hook again
UnhookWindowsHookEx(miHook);
此代码示例当然不能按原样使用,但必须根据您的需要进行调整,并且各个部分必须放在代码中的正确位置。
另请阅读 SetWindowsHookEx 的备注部分。您可能需要在函数所在的位置创建一个 DLL(您可以从主代码加载它)。我示例中的 hInstance
必须是包含挂钩过程的模块的实例句柄。此外,您需要发送消息 才能让您的挂钩正常工作!
我正在尝试制作一个可以忽略鼠标点击的后台程序 - 在程序之外。
如何通过 C++ 告诉 Windows 这个? 我已经让程序识别鼠标点击。只是不知道如何忽略它。
我需要这样做的原因是因为我的鼠标有一个缺陷,当我只单击一次时它会意外双击(或更多)。
所以基本上,当程序注册我用鼠标单击时,它会让第一次单击通过,但随后禁用该按钮(忽略每次后续单击)约 200 毫秒。
如果可能,我想避免使用任何外部库。只有 Visual Studio.
附带的标准非常感谢您的阅读!
您可以使用 low-level mouse hook:
// Variable to store the hook handle
HHOOK miHook;
// This is the hook procedure
LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam) {
if(nCode == HC_ACTION) {
MSLLHOOKSTRUCT &msll = *(reinterpret_cast<MSLLHOOKSTRUCT*>(lParam)); // In there is more context if you need it
if(wParam == WM_LBUTTONDOWN) {
// Do your logic here
if(letsIgnoreThisClick) {
return -1; // This will make the click be ignored
}
}
}
return CallNextHookEx(miHook, nCode, wParam, lParam); // Important! Otherwise other mouse hooks may misbehave
}
// This is how you install the hook
miHook = SetWindowsHookEx(WH_MOUSE_LL, reinterpret_cast<HOOKPROC>(&LowLevelMouseProc), hInstance, 0);
// And this is how you would remove the hook again
UnhookWindowsHookEx(miHook);
此代码示例当然不能按原样使用,但必须根据您的需要进行调整,并且各个部分必须放在代码中的正确位置。
另请阅读 SetWindowsHookEx 的备注部分。您可能需要在函数所在的位置创建一个 DLL(您可以从主代码加载它)。我示例中的 hInstance
必须是包含挂钩过程的模块的实例句柄。此外,您需要发送消息 才能让您的挂钩正常工作!