我正在尝试制作一个位于后台的程序,可以忽略鼠标点击 - 在程序之外。
如何通过c ++告诉Windows? 我已经让程序识别出鼠标点击。不是如何忽视它。
我需要这样做的原因是因为我的鼠标有一个缺陷,当我只点击一次时它意外地双击(或更多)。
所以基本上,当我用鼠标点击程序注册时,它会让第一次点击,但然后禁用该按钮(忽略每一次跟随)约200毫秒。
如果可能,我想避免使用任何外部库。只有Visual Studio附带的标准版本。
非常感谢您的阅读!
答案 0 :(得分:3)
您可以使用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
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
必须是包含钩子过程的模块的实例句柄。此外,您需要提取消息以使您的挂钩正常工作!