如何在 Windows 中忽略鼠标单击?(C++)

Can*_*eep 0 c++ windows mouse visual-studio-2015

我正在尝试制作一个位于后台的程序,可以忽略鼠标点击 - 在程序之外。

我如何通过 C++ 告诉 Windows 这个?我已经让程序识别鼠标点击。只是不是如何忽略它。

我需要这样做的原因是因为我的鼠标有一个缺陷,当我只单击一次时,它会意外地双击(或多次)。

所以基本上,当我用鼠标点击的程序注册时,它会让第一次点击通过,然后禁用该按钮(忽略每次点击)约 200 毫秒。

如果可能,我想避免使用任何外部库。只有 Visual Studio 附带的标准。

非常感谢您的阅读!

Che*_*yDT 5

您可以使用低级鼠标钩子

// 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);
Run Code Online (Sandbox Code Playgroud)

这个代码示例当然不能按原样使用,但必须根据您的需要进行调整,并且各个部分必须放在代码中的正确位置。

另请阅读SetWindowsHookEx的备注部分。您可能需要在您的函数所在的位置创建一个 DLL(您可以从主代码中加载它)。将hInstance在我的例子必须是包含钩子程序模块的实例句柄。您还需要发送消息才能使钩子正常工作!