如何确定全局键盘挂钩是否已断开连接?

时间:2012-10-08 13:59:23

标签: c# .net visual-studio-2010 security

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

它工作正常,然后它就停止接收击键。

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

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

2 个答案:

答案 0 :(得分:5)

无法知道(来自msdn):

  

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

     

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

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

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

答案 1 :(得分:2)

这是一个功能!这是description of the reason