确定哪个键盘正在发送击键

时间:2009-08-26 22:07:44

标签: c# keyboard

我有2个键盘连接到我的机器上(一个在PS / 2上,另一个在USB上)。我如何确定哪个键盘在C#中发送击键?

5 个答案:

答案 0 :(得分:3)

这是一个示例,非常脏的代码,展示了如何使用.NET的Windows输入挂钩。最适合使用Snippet Compiler:>

编辑:结果是帖子的长度限制

grab the source from code here

答案 1 :(得分:2)

如果有USB,那么你应该能够弄明白 - 至少在驱动程序级别上。但是,堆叠越高,我没有听说过这样的选择。如果根本不可能,我不会感到惊讶。

您可能想要查看的一个途径是舞蹈模拟器。你知道,那些带有“跳舞垫”(或“跳舞垫”)的人。这些舞蹈垫实际上只不过是大键盘。自己检查一下 - 打开记事本,跳上跳舞毯。 :)

现在,其中一些程序还提供竞争模式,您可以将两个舞蹈垫连接起来并与合作伙伴竞争。在这种情况下,他们需要以某种方式区分垫子 - 这与你试图做的事情是一样的。

答案 2 :(得分:1)

我猜测问题是,当使用条形码扫描器时,数字是进入活动字段而不是条形码ID的字段?

一种解决方案是挂钩其他字段的OnChange事件并查找插入其中的条形码编号(通过RegEx)。如果找到,请将条形码移出该字段,然后将值移到条形码字段。

无需设备访问,甚至可以在Javascript驱动的网页上完成。

答案 3 :(得分:1)

好的,这是一个真正的 kludgy方法,它只适用于非常有限的用例子集:

  1. 在其中一个键盘上粘贴,粘贴或缩短一组修改键(例如右键)。
  2. 在每次按键时,查看修改器。如果将修改器设置为胶合键盘上的修改器,则假设键盘是源。如果没有,假设它是另一个键盘。
  3. 限制:

    1. 您不能在应用程序外使用胶合键盘,因为只有它知道忽略修改键。
    2. 您不能在自己的应用中使用这些修改键作为键盘快捷键的一部分。
    3. 如果用户按下正确的按钮,则其他键盘可能会模拟您的(意外与否)。
    4. 您需要停用StickyKeys。
    5. 使用Alt或Ctrl有一个缺点:如果您按其他,Windows可能会使用您的应用程序无法捕获的组合。
    6. 未知#1 :是否仅从作为键击源的键盘填充ModifierKeys,还是来自所有连接键盘上所有修饰符的总和。我怀疑每个键盘在内部发送附加到击键的修改器,Windows不会聚合它们。

      未知#2 :System.Windows.Forms.Control.ModifierKeys是否只提供 Ctrl / Shift / Alt位,或提供足够的细节,比方说,区分右Ctrl键从左侧。以下是理论上可以测试的键,我不知道有多少是通过ModifierKeys提供的:

      http://msdn.microsoft.com/en-us/library/system.windows.forms.keys.aspx

答案 4 :(得分:0)

我认为你能做到这一点的唯一方法就是监控USB流量。我见过这样做的程序,但我不知道如何在C#中做到这一点。因此,如果有USB流量和按键,那就是USB键盘。如果没有流量,那就是PS / 2流量。

当然,另一个需要注意的是它不会推广到任意或未来的键盘连接类型。