4

我使用了Stephen Toubs版本的全局键盘挂钩,在 WIN 7 环境中使用它。

它工作了一会儿,然后它就停止接收击键。

我在 regedit 中增加了超时值,但一段时间后它仍然断开连接。

所以问题是,我如何检测它是否已断开连接以及如何将钩子设置为再次激活?

4

2 回答 2

5

没有办法知道(来自msdn):

挂钩过程应在比以下注册表项中的 LowLevelHooksTimeout 值中指定的数据条目更短的时间内处理消息:HKEY_CURRENT_USER\Control Panel\Desktop

如果钩子过程超时,系统将消息传递给下一个钩子。但是,在 Windows 7 及更高版本上,该挂钩会在不被调用的情况下被静默删除。应用程序无法知道挂钩是否被移除。

解决此问题的一种方法是保留收到的最后一条消息的时间戳,并在上一条消息过去一段时间后使用后台计时器添加新挂钩。

此外,为了尽量减少这种情况的发生,您的钩子处理方法应该只收集最少的所需信息,并将数据的实际处理留给另一个线程。

于 2012-10-15T12:51:15.917 回答
2

这是一个特点!这是原因的描述

于 2012-10-17T14:44:26.570 回答