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