是否可以在Windows中有选择地阻止键盘输入?怎么样?

时间:2011-09-28 09:28:27

标签: c# windows

我的应用程序(在C#中)需要与USB条形码扫描仪连接,这基本上像键盘一样工作。它在末尾输入带有回车键的条形码。

应用程序即使在后台也需要工作,所以我使用低级键盘钩来获取并过滤全局键事件中的条形码。这部分已经有效了。

这是我的问题:如果它是条形码,我不希望其他应用程序获得键盘(扫描仪)输入。并且不应干扰正常的关键事件。总之,有选择地阻止关键事件。这可能吗?

我的应用程序是在C#中,但我对C ++或更多原生解决方案没有任何问题,只要它易于集成到C#中。

感谢。

其他信息:

  1. 整个想法都是在后台工作,即使它不活跃。它监视全局关键事件流并发现条形码序列(已经使用Hook实现)。最重要的是,它不会干扰正常的键盘事件或其他应用程序的操作。这就是为什么我无法阻止所有关键事件或使其成为最顶层的事件。

  2. 我已经可以获得条形码了。我需要阻止其他应用程序获取条形码。

2 个答案:

答案 0 :(得分:0)

在键盘钩子的末尾,您可以调用CallNextHookEx来执行链中的下一个钩子。

我建议将一些独特的签名作为条形码的序言,以便您的键盘钩子程序可以将其检测为扫描仪的有效条形码输入。现在,当您获得此数据时,只需跳过对“CallNextHookEx”的呼叫即可。因此,连锁店将停产,其他计划将无法获得您的条形码。否则 - 请致电' CallNextHookEx'因此链条可以继续。

注意:这是我的理论,我自己从未尝试过完全相同的事情。但是,我用C ++和C#编写了钩子。

答案 1 :(得分:0)

检查此项目 http://globalmousekeyhook.codeplex.com/

它也在C#中,因此可以使您的编码更容易。听起来你需要的只是连接全局按键事件并通过设置Handled值或类似的东西来抑制它。