如何创建没有DLL的全局WH_GETMESSAGE钩子

如何创建没有DLL的全局WH_GETMESSAGE钩子,dll,windows-7,mfc,hook,global,Dll,Windows 7,Mfc,Hook,Global,我正在尝试创建一个没有DLL的全局WH_GETMESSAGE钩子,但我无法成功。 我的操作系统是Win7 32位,这是我的一些代码: SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,GetModuleHandle(NULL),0); 如果你有时间,请帮助我。:) hMod[in] 类型:HINSTANCE 包含lpfn参数指向的钩子过程的DLL句柄。如果dwThreadId参数指定由当前进程创建的线程,并且钩子过程位于与当前进程关联的代码内,则必须将hMo

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

SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,GetModuleHandle(NULL),0);
如果你有时间,请帮助我。:)

hMod[in]

类型:HINSTANCE

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


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

很明显,最后一个参数不应该是“0”,它应该是要在其中调用函数的线程的线程id。不能同时为最后一个和下一个参数传递null。使用GetThreadId()获取当前线程的id,这很可能是您想要执行的操作


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

您需要在SetWindowsHookEx的调用线程中创建一个消息循环

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

谢谢你的回答,但对我来说似乎没用。我想我还有别的办法。谢谢。@italkboy,你应该写下你的替代方法作为答案,这样其他有同样问题的人也可以得到帮助。@italkboy,那么没问题-如果你找到了解决方案,给未来的旅行者留下一个提示是很有帮助的:)通常的方法是专门为钩子创建一个DLL,顺便说一句。谢谢你的关注,我会在找到解决方案后告诉你。非常感谢,我找到了一个折衷方案,我会再试一次。:)