通过原始输入而不是低电平挂钩的挂钩键

时间:2019-04-03 17:22:23

标签: vb.net keyboard-hook

我的旧实用程序(一个用于在线扑克的小热键实用程序)基于低级钩SetWindowsHookEx API,与Win7完美搭配,但是键盘钩在Win 10上经常崩溃。

在Msdn中,我读到:

  

挂钩过程应该比数据处理时间更短地处理一条消息   在以下LowLevelHooksTimeout值中指定的条目   注册表项:

     

HKEY_CURRENT_USER \控制面板\桌面

     

该值以毫秒为单位。如果挂钩过程超时,系统将通过   消息到下一个钩子。 但是,在Windows 7和更高版本上,挂钩是   被静默删除而未被叫。没有办法   应用程序以了解挂钩是否已删除。   注意调试挂钩无法跟踪这种类型的低级键盘挂钩。   如果应用程序必须使用低级挂钩,则它应运行挂钩   在专用线程上,将工作传递给工作线程,然后   然后立即返回

我这样做是使用BackGroundWorker(挂钩时间为1-2毫秒!),但无论如何在Win 10挂钩中都会随机且频繁地停止工作。

我还可以阅读:

  

在大多数情况下,应用程序需要使用低级挂钩,   应该监视原始输入。这是因为原始输入可以   异步监视目标鼠标和键盘消息   比低级钩子更有效地处理其他线程。欲了解更多   有关原始输入的信息,请参阅原始输入。

好,但是有一个问题:使用原始输入,我可以获取按下的键,但是如何冻结按下的键?有了低级的提示,我可以在KeyDown事件中写: e.Handled = True ,但是使用Raw Input我看不到任何类似的东西。

0 个答案:

没有答案