0

我之前问过一个关于类似问题的问题,但我相信这次情况有所不同。

我有一个具有标准钩子、取消钩子和 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,那么我根本不会收到消息。

可能是什么原因?

4

1 回答 1

3
  • 您使用的是 64 位 Windows 吗?如果是这样,您的挂钩进程和 DLL 必须与您希望挂钩的进程的位数相匹配。

  • 您的示例中的 hInstance 是什么?DLL 还是 EXE 实例?它应该是包含 msgHook 函数的 DLL。

  • 你的 msgHook 是做什么的?你如何检测它是否被调用?请注意,它将在您挂钩的进程中调用,而不是在您自己的进程中。(因此,如果您在其上设置了断点,除非您将调试器附加到已挂钩的进程,而不是安装挂钩的进程,否则不会触发它。)

于 2010-12-02T22:24:41.403 回答