我之前问过一个关于类似问题的问题,但我相信这次情况有所不同。
我有一个具有标准钩子、取消钩子和 msgProc 函数的 DLL。我在我的主应用程序中加载这个 DLL,然后调用“hook”,如下所示:
HOOKDLL_API BOOL setHook( HWND hWnd, DWORD threadID )
{
if( hWndServer != NULL )
return FALSE;
hook = SetWindowsHookEx( WH_GETMESSAGE, (HOOKPROC)msghook, hInstance, threadID );
if( hook != NULL )
{
hWndServer = hWnd;
ofstream logFile;
logFile.open( "LOG.txt" );
logFile << "Hooked for: " << hWndServer << endl;
logFile.close();
return TRUE;
}
return FALSE;
}
问题是,如果我将其设为全局,threadID = 0,则 msgHook 仅捕获加载库的进程的窗口接收到的消息,而不捕获其他任何消息,即使它应该是全局挂钩。
如果我提供某个其他窗口的 threadID,那么我根本不会收到消息。
可能是什么原因?