键盘钩子只在调用过程中工作

时间:2011-01-18 16:12:26

标签: c++ winapi input keyboard hook

我正在做一个VoIP程序,我用键盘挂钩来检查按键通话按钮。 它在安装钩子的过程中本地工作,但我的目标是让它检查所有全局输入。 这是我使用的:

SetWindowsHookEx(WH_KEYBOARD,hook_hookproc,hookInst,0);

根据MSDN和其他消息来源,我需要将我的挂钩dll注入所有其他进程......这将是痛苦的,我怀疑ventrilo / teamspeak等会这样做。是否可以将其注入系统进程,然后所有子进程(所有)都以这种方式继承钩子调用?或者你必须将它注入每一个过程吗?

欢呼声

1 个答案:

答案 0 :(得分:3)

像WH_KEYBOARD这样的全局钩子确实需要一个可以注入的DLL。您通常需要添加一些IPC代码来告诉其他人。请注意,您正在跨越流程边界执行此操作,因此您需要管道之类的东西。

您是否考虑使用低级键盘挂钩(WH_KEYBOARD_LL)。它不需要可注入的DLL,Windows切换上下文到您的进程来调用钩子。几乎总是足以检测特定的击键,可能与GetAsyncKeyState()结合以检查修改键。

使用RegisterHotKey()注册的热键也许可以正常工作。它应该是您的首选,因为它对机器的影响要小得多。