自定义 LowLevelMouseProc 回调函数不阻止输入

custom LowLevelMouseProc callback function not blocking input

本文关键字:输入 函数 LowLevelMouseProc 回调 自定义      更新时间:2023-10-16

我正在尝试通过挂钩全局WH_MOUSE_LL处理程序来禁用窗口中的鼠标右键单击按钮,该处理程序负责以下鼠标事件

WM_RBUTTONDOWN

.现在,我能够用我自己的自定义 LowLevelMouseProc 回调函数挂接处理程序,因为我应该从我的控制台出来。代码在当前时刻非常小且整洁,如下所示:

LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM 
lParam);
LRESULT CALLBACK myLowLevelMouseProc(int nCode, WPARAM wParam, LPARAM 
lParam)
{
if (nCode == 0 && wParam == WM_RBUTTONDOWN)
{
cout << "RBUTTONDOWN intercepted" << endl; // gets outputed whenever i press my right mouse button.
return -1;
}
return CallNextHookEx(hook, nCode, wParam, lParam);
}
int messages()
{
while (msg.message != WM_QUIT)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int)msg.wParam;
}
int main()
{
hook = SetWindowsHookExW(WH_MOUSE_LL, myLowLevelMouseProc, NULL, 
0);
return messages();
}

这里的问题是,鼠标右键单击仍然通过,并且没有被阻止。我尝试到处寻找,并返回非零"应该"阻止单击,但它没有。

检查 wParam WM_RBUTTONUP 以及WM_RBUTTONDOWN时修复了问题

改变

if (nCode == 0 && wParam == WM_RBUTTONDOWN)

自:

if (nCode == 0 && wParam == WM_RBUTTONDOWN || wParam == WM_RBUTTONUP)