在两个线程中设置两个鼠标挂钩

时间:2014-09-25 05:42:51

标签: c++ windows winapi 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);
}

使用上面描述的代码我在第一个线程中设置了本地钩子。 在第二个线程中我还需要设置新的本地钩子。问题是 - 当我设置新的钩子(第二个线程)时,全局变量hhk将被覆盖。而第一个钩子的mouseproc现在使用错误的钩子手柄。对? 那么我必须作为CallNextHookEx()函数的第一个参数传递什么?

1 个答案:

答案 0 :(得分:2)

你不需要知道钩子proc中的HHOOK值,因为CallNextHookEx忽略了第一个参数(所以你可以为第一个参数传递NULL)。

您需要单独保存两个手柄,以便稍后可以使用UnhookWindowsHookEx删除两个钩子。