我的旧实用程序(一个用于在线扑克的小热键实用程序)基于低级钩SetWindowsHookEx API,与Win7完美搭配,但是键盘钩在Win 10上经常崩溃。
在Msdn中,我读到:
挂钩过程应该比数据处理时间更短地处理一条消息 在以下LowLevelHooksTimeout值中指定的条目 注册表项:
HKEY_CURRENT_USER \控制面板\桌面
该值以毫秒为单位。如果挂钩过程超时,系统将通过 消息到下一个钩子。 但是,在Windows 7和更高版本上,挂钩是 被静默删除而未被叫。没有办法 应用程序以了解挂钩是否已删除。 注意调试挂钩无法跟踪这种类型的低级键盘挂钩。 如果应用程序必须使用低级挂钩,则它应运行挂钩 在专用线程上,将工作传递给工作线程,然后 然后立即返回
我这样做是使用BackGroundWorker(挂钩时间为1-2毫秒!),但无论如何在Win 10挂钩中都会随机且频繁地停止工作。
我还可以阅读:
在大多数情况下,应用程序需要使用低级挂钩, 应该监视原始输入。这是因为原始输入可以 异步监视目标鼠标和键盘消息 比低级钩子更有效地处理其他线程。欲了解更多 有关原始输入的信息,请参阅原始输入。
好,但是有一个问题:使用原始输入,我可以获取按下的键,但是如何冻结按下的键?有了低级的提示,我可以在KeyDown事件中写: e.Handled = True ,但是使用Raw Input我看不到任何类似的东西。