我使用下面的代码来设置鼠标本地钩子(Hook):
//declare hook handle global variable:
static HHOOK hhk;
//set new hook:
hhk = SetWindowsHookEx(WH_MOUSE, (HOOKPROC)MouseWndProc, GetModuleHandle(NULL), GetCurrentThreadId());
这里是mouseproc回调函数的代码:
LRESULT CALLBACK MouseWndProc(int nCode, WPARAM wParam, LPARAM lParam)
{
MOUSEHOOKSTRUCT *pMouseStruct = (MOUSEHOOKSTRUCT*)lParam;
if(nCode < 0)
{
return CallNextHookEx(hhk, nCode, wParam, lParam);
}
//do something...
return CallNextHookEx(hhk, nCode, wParam, lParam);
}
使用上述代码,我在第一个线程中设置了本地 Hook 。
在第二个线程中,我还需要设置新的本地 Hook 。问题是 - 当我设置新的钩子(Hook)(第二个线程)时,全局变量 hhk
将被覆盖。并且第一个钩子(Hook)的 mouseproc 现在使用了错误的钩子(Hook)句柄。正确的?
那么我必须将什么作为 CallNextHookEx() 函数的第一个参数传递?
最佳答案
自 CallNextHookEx
以来,您不需要知道 hook proc 中的 HHOOK
值忽略第一个参数(因此您可以只为第一个参数传递 NULL
)。
您需要分别保存这两个 handle ,这样您就可以使用UnhookWindowsHookEx
移除两个 Hook 。稍后。
关于c++ - 在两个线程中设置两个鼠标钩子(Hook),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26031406/