为什么SetWindowsHookEx返回0?

时间:2010-12-08 14:24:41

标签: c++ winapi

我正在尝试设置WH_CBT挂钩,并且它一直返回0。 我检查了错误,我得到了错误1428.我研究了一下,发现我的hMod参数有问题,但我看不出应该放入什么而不是{{1} }。有谁知道我做错了什么?

这是我的代码:

null

P.S。如果代码有关于它的愚蠢元素,我道歉。我不是编程的新手,只是C ++。

2 个答案:

答案 0 :(得分:3)

如果为指定钩子为全局的threadid指定0。为了实现这一点,需要将钩子注入其他进程。这意味着钩子需要从DLL暴露。您需要将钩子过程移动到dll,或者在过程中指定一个线程。

答案 1 :(得分:1)

使用GetModuleHandle(NULL)GetCurrentThreadId()获取传递给该函数所需的句柄和线程ID。

样品:

hookHandle = SetWindowsHookEx(WH_CBT,CBTProc,
                              GetModuleHandle(NULL),  
                              GetCurrentThreadId());

正如洛根所说,那只能挂钩当前的流程。您需要将代码放在dll中以开发系统挂钩。