使用WH_GETMESSAGE调用setwindowshookex对除注入器之外的任何进程都不起作用

时间:2010-12-02 21:48:31

标签: winapi setwindowshookex

我之前曾问过类似的问题,但我相信这次情况不同。

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

它可能是什么原因?

1 个答案:

答案 0 :(得分:3)

  • 您使用的是64位Windows吗?如果是这样, 你的钩子进程和DLL必须匹配 这个过程的重要性 希望勾手。

  • 您的示例中的hInstance是什么? DLL或EXE实例?它 应该是包含的DLL msgHook功能。

  • 你的msgHook有什么作用?你怎么 检测它是否存在 叫什么名字?请注意,它将被调用 在你挂钩的过程中, 不在你自己的过程中。 (因此,如果 你已经设置了一个断点,它 除非你附上,否则不会被触发 调试程序到你的过程 迷上了,而不是那个过程 安装了钩子。)