无法为进程中的所有线程安装挂钩

时间:2009-11-24 09:57:41

标签: c++ windows winapi setwindowshookex

我正在申请中挂钩键盘。要求是在过程中的所有线程中挂钩键盘。

我使用了SetWindowsHookEx API

SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)::KeyboardHookProc, hInst, 0);

为正在处理的所有线程创建钩子。 这样可以正常工作,直到调用线程存在。一旦调用线程终止挂钩停止工作。

有没有办法挂钩进程而不是进程中的线程。

3 个答案:

答案 0 :(得分:1)

LowLevelKeyboardProc的SDK文档中的这个细则至关重要:

此挂钩在安装它的线程的上下文中调用。通过向安装了挂钩的线程发送消息来进行调用。因此,安装钩子的线程必须有一个消息循环。

换句话说,您必须保持线程处于活动状态,并且线程必须引发消息循环。你现在看到的行为完全是设计上的。

答案 1 :(得分:0)

根据MSDN,全局应用 WH__KEYBOARD ___ LL 而不是特定于应用程序。

如果要为特定于流程的线程安装挂钩,请使用 WH ___ KEYBOARD

答案 2 :(得分:0)

只需在主函数中安装钩子即可。如果只在特定线程运行时才需要它,可以使用volatile标志。