【发布时间】:2014-09-25 05:42:51
【问题描述】:
我使用以下代码设置鼠标本地挂钩:
//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);
}
使用上述代码,我在第一个线程中设置了本地挂钩。
在第二个线程中,我还需要设置新的本地挂钩。问题是 - 当我设置新钩子(用于第二个线程)时,全局变量 hhk 将被覆盖。并且第一个钩子的 mouseproc 现在使用错误的钩子句柄。对?
那么我必须传递什么作为 CallNextHookEx() 函数的第一个参数?
【问题讨论】:
-
所以使用两个变量。
-
在这种情况下,mouseproc 函数如何确定其变量?
-
为什么在调用
SetWindowsHookEx时将MouseWndProc转换为HOOKPROC? -
声明两个钩子程序
MouseWndProc1和MouseWndProc2。其中一个调用MouseWndProcCommon(hhk1, nCode, wParam, lParam),另一个调用MouseWndProcCommon(hhk2, nCode, wParam, lParam)。