【问题标题】:How to differentiate between a keypress of more than one usb-keyboard connected to the same host (in C#)如何区分连接到同一主机的多个 USB 键盘的按键(在 C# 中)
【发布时间】:2017-01-25 20:31:57
【问题描述】:

我需要区分(至少)两个连接到单个 PC 的 USB 键盘的按键。 是否有可用的方法/程序来确定键盘 A 或键盘 B 是否按下键“s”(例如)? (首选语言是 C#)

伪代码:

if (keyPressed == 's')
{ 
   if(keyboardID == 'A')
   {
       print("Key 's' was pressed by Keyboard A");
   }
   else if (keyboardID == 'B')
   {
       print("Key 's' was pressed by Keyboard B");
   }
}

【问题讨论】:

  • 我建议为您的问题提供更多背景信息。这将作为控制台应用程序还是 win 表单应用程序等运行。
  • 我会关注这个来寻找答案,因为我自己(以及老鼠)有点好奇。我确信它涉及到具体识别正在使用的 USB 端口的地址、IRQ 或类似的地址。
  • windows 还是 linux?
  • 在上下文中没有限制,这意味着操作系统是 Windows 还是 Linux 都没有关系...我可以选择在主机 PC 上运行的操作系统。此外,我可以决定它是控制台应用程序还是 win 表单应用程序。当我想开箱即用时......也可以安装两个虚拟机,将每个键盘连接到一个虚拟机,并编写一个程序,该程序通过 TCP 套接字从虚拟机通信到我的主机 PC......但也许有是完全不同的更简单的方法吗?

标签: c# keyboard usb


【解决方案1】:

按键被操作系统处理为事件

在 linux 中对于每个输入设备,/dev/input/event* 中都有单独的事件队列(* 表示特定的设备编号)

在 linux 中,您可以使用命令 sudo lsinput (input-utils) 列出所有输入设备

您可以捕获每个键盘的特定事件,请参阅Linux keyboard event capturing /dev/inputX

windows 中 类似。您可以使用rawInput 并为每个设备获取一个句柄。更深入的信息和示例代码在

https://blogs.msdn.microsoft.com/oldnewthing/20160627-00/?p=93755 ("设备句柄告诉我们哪个键盘产生了输入...")

https://www.codeproject.com/Articles/17123/Using-Raw-Input-from-C-to-handle-multiple-keyboard

raw input handling (distinguishing secondary mouse)

https://msdn.microsoft.com/en-us/library/windows/desktop/ms645543%28v=vs.85%29.aspx

【讨论】:

    【解决方案2】:

    没有达到驱动程序级别并在那里拦截击键,你真的不能(我认为)。我使用蓝牙键盘和蓝牙键盘,但无法找到执行您要求的方法,因此键盘上的数字 3 会与键盘键盘上的数字 3 不同。

    【讨论】:

      猜你喜欢
      • 2014-03-02
      • 1970-01-01
      • 2016-05-21
      • 1970-01-01
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      • 2017-02-18
      相关资源
      最近更新 更多