我试图挂钩由单独进程创建的窗口的WM_PAINT事件,而我知道的唯一选项就是使用SetWindowsHookEx()。
我有一个运行以下代码的C ++可执行文件:
HMODULE hDllInstance = LoadLibrary(L"NiceLibrary");
HOOKPROC pOverlayHook = (HOOKPROC) GetProcAddress(hDllInstance, "OverlayHook");
SetWindowsHookEx(WH_GETMESSAGE, pOverlayHook, hDllInstance, 0 /*dwThreadId*/);
和“NiceLibrary.dll”包含函数OverlayHook(...)。我在函数中放置了一个printf(“bla”),以监视它何时被调用。出于某种原因,“bla”仅出现在当前进程生成的事件中,即使MSDN documentation指出:
dwThreadId [in]
与之对应的线程的标识符 钩子程序是相关的。对于桌面应用,如果是这样 参数为零,钩子过程与所有现有关联 线程在与调用线程相同的桌面上运行。
此外,在SetWindowsHookEx()之后调用GetLastError()返回0,表示没有发生错误。
你知道我做错了吗?