如何创建没有DLL的全局WH_GETMESSAGE HOOK

时间:2011-06-20 02:27:12

标签: dll windows-7 mfc hook global

我正在尝试创建一个没有DLL的全局WH_GETMESSAGE HOOK,但我无法成功。 我的操作系统是Win7 32Bit,这是我的一些代码:

SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,GetModuleHandle(NULL),0);

如果你有空的时候请帮助我。 :)

3 个答案:

答案 0 :(得分:2)

As documented

  

hMod [in]

     

类型:HINSTANCE

     

包含lpfn参数指向的钩子过程的DLL句柄。如果dwThreadId参数指定当前进程创建的线程,并且钩子过程位于与当前进程关联的代码中,则hMod参数必须设置为NULL。

hMod 必须是DLL的句柄。不是EXE。这是因为DLL将被加载到要挂钩的所有正在运行的进程中,并且其代码直接从这些进程中运行。

答案 1 :(得分:1)

您需要在SetWindowsHookEx的调用线程中使用消息循环

while(GetMessage(&msg, NULL, 0, 0))
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}

答案 2 :(得分:0)

很明显,最后一个参数不应该是'0',它应该是你要调用函数的线程的线程id。你不能为最后一个参数和倒数第二个参数传入null 。使用GetThreadId()来获取当前线程的id,这很可能是你想要做的。

上一张海报的答案对你非常有用,如果你读过它,你会看到上面的内容。