问题描述
当我把钩子放在鼠标上时,我会周期性地失去灵敏度,它增加了大约 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,0) > 0)
{
TranslateMessage(&message);
dispatchMessage(&message);
}
UnhookWindowsHookEx(hook);
解决方法
您在这段代码中失去了敏感性,因为 std::cout
非常慢。你需要对这种钩子做出非常快速的反应,否则你显然会失去敏感性。
如果您确实需要登录钩子,请使用 spdlog 之类的东西并异步记录所有内容。
此外,正如理查德在评论中提到的,你需要在钩子开始时这样的东西:
if (nCode < 0) // do not process message
return CallNextHookEx(hhook,nCode,wParam,lParam);