【发布时间】:2010-11-23 04:40:08
【问题描述】:
我的机器上连接了 2 个键盘(一个在 PS/2 上,另一个在 USB 上)。在 C# 中如何确定哪个键盘发送击键?
【问题讨论】:
-
它们都不起作用?通常这不是一个或另一个情况(除非 PS2 在启动时没有插入)
-
我有两个 USB 设备,一个键盘和一个模拟键盘的条形码扫描仪。我很想知道哪个是哪个。
我的机器上连接了 2 个键盘(一个在 PS/2 上,另一个在 USB 上)。在 C# 中如何确定哪个键盘发送击键?
【问题讨论】:
我认为您可以做到这一点的唯一方法是监控 USB 流量。我见过这样做的程序,但我不知道如何在 C# 中做到这一点。因此,如果有 USB 流量和击键,那就是 USB 键盘。如果没有流量,那就是 PS/2 的。
当然,另一个需要注意的是,它不能推广到任意或未来的键盘连接类型。
【讨论】:
如果一个在 USB 上,那么您应该能够弄清楚 - 至少在驱动程序级别。但是,在更高的堆栈上,我还没有听说过这样的选择。如果根本不可能,我不会感到惊讶。
您可能想要查看的一个途径是跳舞模拟器。你知道,那些有“舞垫”(或“舞垫”)的。这些舞蹈垫实际上只不过是大键盘。自己检查一下 - 打开记事本并跳上舞蹈垫。 :)
现在,其中一些程序还提供竞争模式,您可以在其中连接两个舞蹈垫并与合作伙伴竞争。在这种情况下,他们需要以某种方式区分垫子 - 这与您尝试做的事情相同。
【讨论】:
我猜问题是当使用条形码扫描仪时,数字进入活动字段而不是条形码 ID 字段?
一种解决方案是挂钩其他字段的 OnChange 事件并查找插入其中的条形码编号(通过 RegEx)。如果找到,请将条形码移出该字段并将值移至条形码字段。
无需设备访问,这甚至可以在 Javascript 驱动的网页上完成。
【讨论】:
好的,这是一个真的笨拙的方法,它只适用于非常有限的用例子集:
限制:
未知#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
【讨论】:
这是一个非常脏的示例代码,展示了如何使用 .NET 中的 windows 输入挂钩。与 Snippet Compiler 配合使用效果最佳:>
编辑:原来帖子有长度限制,
.
【讨论】: