我正在尝试设置WH_CBT
挂钩,并且它一直返回0。
我检查了错误,我得到了错误1428.我研究了一下,发现我的hMod
参数有问题,但我看不出应该放入什么而不是{{1} }。有谁知道我做错了什么?
这是我的代码:
null
P.S。如果代码有关于它的愚蠢元素,我道歉。我不是编程的新手,只是C ++。
答案 0 :(得分:3)
如果为指定钩子为全局的threadid指定0。为了实现这一点,需要将钩子注入其他进程。这意味着钩子需要从DLL暴露。您需要将钩子过程移动到dll,或者在过程中指定一个线程。
答案 1 :(得分:1)
使用GetModuleHandle(NULL)
和GetCurrentThreadId()
获取传递给该函数所需的句柄和线程ID。
样品:
hookHandle = SetWindowsHookEx(WH_CBT,CBTProc,
GetModuleHandle(NULL),
GetCurrentThreadId());
正如洛根所说,那只能挂钩当前的流程。您需要将代码放在dll中以开发系统挂钩。