我有2个键盘连接到我的机器上(一个在PS / 2上,另一个在USB上)。我如何确定哪个键盘在C#中发送击键?
答案 0 :(得分:3)
这是一个示例,非常脏的代码,展示了如何使用.NET的Windows输入挂钩。最适合使用Snippet Compiler:>
编辑:结果是帖子的长度限制
答案 1 :(得分:2)
如果有USB,那么你应该能够弄明白 - 至少在驱动程序级别上。但是,堆叠越高,我没有听说过这样的选择。如果根本不可能,我不会感到惊讶。
您可能想要查看的一个途径是舞蹈模拟器。你知道,那些带有“跳舞垫”(或“跳舞垫”)的人。这些舞蹈垫实际上只不过是大键盘。自己检查一下 - 打开记事本,跳上跳舞毯。 :)
现在,其中一些程序还提供竞争模式,您可以将两个舞蹈垫连接起来并与合作伙伴竞争。在这种情况下,他们需要以某种方式区分垫子 - 这与你试图做的事情是一样的。
答案 2 :(得分:1)
我猜测问题是,当使用条形码扫描器时,数字是进入活动字段而不是条形码ID的字段?
一种解决方案是挂钩其他字段的OnChange事件并查找插入其中的条形码编号(通过RegEx)。如果找到,请将条形码移出该字段,然后将值移到条形码字段。
无需设备访问,甚至可以在Javascript驱动的网页上完成。
答案 3 :(得分:1)
好的,这是一个真正的 kludgy方法,它只适用于非常有限的用例子集:
限制:
未知#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流量。
当然,另一个需要注意的是它不会推广到任意或未来的键盘连接类型。