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

syn*_*cis 4 .net c# security visual-studio-2010

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

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

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

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

Jar*_*das 5

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

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

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

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

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