我之前曾问过类似的问题,但我相信这次情况不同。
我有一个具有标准hook,unhook和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,那么我根本不会收到消息。
它可能是什么原因?
答案 0 :(得分:3)
您使用的是64位Windows吗?如果是这样, 你的钩子进程和DLL必须匹配 这个过程的重要性 希望勾手。
您的示例中的hInstance是什么? DLL或EXE实例?它 应该是包含的DLL msgHook功能。
你的msgHook有什么作用?你怎么 检测它是否存在 叫什么名字?请注意,它将被调用 在你挂钩的过程中, 不在你自己的过程中。 (因此,如果 你已经设置了一个断点,它 除非你附上,否则不会被触发 调试程序到你的过程 迷上了,而不是那个过程 安装了钩子。)