2011-06-20 65 views
1

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

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

请帮助我,如果你有任何的时间。 :)

回答

2

As documented

HMOD [IN]

类型:HINSTANCE

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

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

+0

谢谢您的回答的调用线程的消息循环,但对我来说好像没用。 – italkboy

+0

我想有其他办法可以做。谢谢〜。 – italkboy

+0

@italkboy,你应该写出你的替代方法作为答案,以便其他人也可以得到同样的帮助... – bdonlan

0

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

上一张海报的答案对您非常有用,如果您已经阅读过,您会亲眼看到上述内容。

+0

非常感谢,我找到了一个妥协方案,我会再试一次。:) – italkboy

1

您需要调用SetWindowsHookEx

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