我正在申请中挂钩键盘。要求是在过程中的所有线程中挂钩键盘。
我使用了SetWindowsHookEx API
SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)::KeyboardHookProc, hInst, 0);
为正在处理的所有线程创建钩子。 这样可以正常工作,直到调用线程存在。一旦调用线程终止挂钩停止工作。
有没有办法挂钩进程而不是进程中的线程。
答案 0 :(得分:1)
LowLevelKeyboardProc的SDK文档中的这个细则至关重要:
此挂钩在安装它的线程的上下文中调用。通过向安装了挂钩的线程发送消息来进行调用。因此,安装钩子的线程必须有一个消息循环。
换句话说,您必须保持线程处于活动状态,并且线程必须引发消息循环。你现在看到的行为完全是设计上的。
答案 1 :(得分:0)
根据MSDN,全局应用 WH__KEYBOARD ___ LL 而不是特定于应用程序。
如果要为特定于流程的线程安装挂钩,请使用 WH ___ KEYBOARD 。
答案 2 :(得分:0)
只需在主函数中安装钩子即可。如果只在特定线程运行时才需要它,可以使用volatile标志。