WH_KEYBOARD_LL仅在我的进程主线程中挂钩

时间:2014-10-10 12:35:29

标签: winapi

当我的应用程序/线程具有焦点时,是否可以使用仅调用钩子函数的WH_KEYBOARD_LL钩子?目前,即使应用程序未处于活动状态,我也会收到电话。

2 个答案:

答案 0 :(得分:3)

当然,SetWindowsHookEx()的第四个参数可以是一个线程ID,使其具有选择性。为你的UI线程传递一个,通过调用GetCurrentThreadId()来获取它。

请注意,这通常不是非常有用,您可以轻松拦截消息循环中的键盘消息。每个GUI类库都支持这一点,这是实现快捷键击所必需的。即使是winapi也有这个,TranslateAccelerator()。强烈建议,调试一个钩子是非常痛苦的,因为钩子回调中的断点或你的回调调用的任何函数都会导致键盘占用5秒钟而你的钩子会被破坏。

答案 1 :(得分:1)

您无法安装挂钩并且还应用某种形式的过滤器来抑制它在某些状态下触发。一旦安装完毕,它就会启动。

因此,当您的应用程序处于非活动状态时,您的钩子函数中不执行任何操作,或者当它变为非活动状态时删除钩子。或者,完全取消挂钩,并响应消息队列中的消息。