【发布时间】:2021-07-12 14:27:59
【问题描述】:
当我将钩子放在鼠标上时,我会周期性地失去灵敏度,它会增加约 0.3 秒(大约两倍)。我怎样才能解决这个问题? 我的处理程序代码:
LRESULT CALLBACK mouseProc(int Code, WPARAM wParam, LPARAM lParam){
MOUSEHOOKSTRUCT* pMouseStruct = (MOUSEHOOKSTRUCT*)lParam;
if (pMouseStruct != nullptr) {
switch (wParam) {
case WM_LBUTTONDOWN:
std::cout << "WM_LBUTTONDOWN";
break;
case WM_LBUTTONUP:
std::cout << "WM_LBUTTONUP";
break;
case WM_RBUTTONDOWN:
std::cout << "WM_RBUTTONDOWN";
break;
case WM_RBUTTONUP:
std::cout << "WM_RBUTTONUP";
break;
default:
break;
}
}
return CallNextHookEx(NULL, Code, wParam, lParam);}
我是这样放的:
HHOOK hook = SetWindowsHookEx(WH_MOUSE_LL, mouseProc, NULL, 0);
MSG message;
while (GetMessage(&message, NULL, 0, 0) > 0)
{
TranslateMessage(&message);
DispatchMessage(&message);
}
UnhookWindowsHookEx(hook);
【问题讨论】:
-
两件事 - (1) "...如果 nCode 小于零,则挂钩过程必须将消息传递给 CallNextHookEx 函数而不进行进一步处理..." docs.microsoft.com/en-us/previous-versions/windows/desktop/… 和 (2)
std::cout <<可能会同步。 -
除了理查德所说的,请注意您使用
std::cout。对于像鼠标这样需要非常长的响应时间的东西来说,它非常慢。 -
附注:
WH_MOUSE_LL使用MSLLHOOKSTRUCT,WH_MOUSE使用MOUSEHOOKSTRUCT。它们不是一回事,所以不要把它们混为一谈。
标签: c++ winapi setwindowshookex