我使用了Stephen Toubs版本的全局键盘挂钩,在 WIN 7 环境中使用它。
它工作了一会儿,然后它就停止接收击键。
我在 regedit 中增加了超时值,但一段时间后它仍然断开连接。
所以问题是,我如何检测它是否已断开连接以及如何将钩子设置为再次激活?
我使用了Stephen Toubs版本的全局键盘挂钩,在 WIN 7 环境中使用它。
它工作了一会儿,然后它就停止接收击键。
我在 regedit 中增加了超时值,但一段时间后它仍然断开连接。
所以问题是,我如何检测它是否已断开连接以及如何将钩子设置为再次激活?
没有办法知道(来自msdn):
挂钩过程应在比以下注册表项中的 LowLevelHooksTimeout 值中指定的数据条目更短的时间内处理消息:HKEY_CURRENT_USER\Control Panel\Desktop
如果钩子过程超时,系统将消息传递给下一个钩子。但是,在 Windows 7 及更高版本上,该挂钩会在不被调用的情况下被静默删除。应用程序无法知道挂钩是否被移除。
解决此问题的一种方法是保留收到的最后一条消息的时间戳,并在上一条消息过去一段时间后使用后台计时器添加新挂钩。
此外,为了尽量减少这种情况的发生,您的钩子处理方法应该只收集最少的所需信息,并将数据的实际处理留给另一个线程。
这是一个特点!这是原因的描述。