我试着勾住鼠标;我的MouseProc是
{
if(nCode==HC_ACTION)
{
if(wParam==WM_LBUTTONDOWN)
{
MessageBox(NULL,L"",L"",MB_OK);
return TRUE;
}
}
return CallNextHookEx(hHook,nCode,wParam,lParam);
}
我不知道为什么它gobal-hooks我的鼠标然后生成至少10个消息框只有一个leftmouse按钮点击。为什么这是错的?另外我想知道如何挂钩任务管理器中存在的特定进程而不是挂钩所有现有窗口?为此,我试图将SetWindowsHookEx()的第四个参数设置为指定线程的id,但似乎没有实际挂钩。 (虽然hHook返回的是非NUll)
谢谢。
答案 0 :(得分:0)
如何挂钩特定流程?鼠标点击是全局的。你的意思是你想要挂钩某个窗口,你可以通过注入的DLL subclass said window来做它。
至于为什么每次点击多次调用你的钩子,MSDN says this:
“只要应用程序调用GetMessage或PeekMessage函数并且有一条鼠标消息需要处理,系统就会调用此函数。”
答案 1 :(得分:0)
你的钩子程序需要存在于DLL的初学者中。这是全局钩子的要求。您可以在线程ID上安装钩子,这是最好的方法,但如果需要,您也可以在钩子中进行一些进程ID检查