读取 HID 设备输入,例如从键盘或条形码扫描仪

Read HID device input, e.g. from a keyboard or barcode scanner

所以我知道这个问题已经被问过很多次了,但我似乎找不到合适的答案。

有谁知道如何从任何 C#/.NET (.NET 6) 应用程序读取 HID 设备?

我试过几个packages/projects,例如:

这些项目的重点是从所有键盘获取数据并检查数据的来源。

现在我真正想要的是 library/way 从这些设备接收数据而不需要 windows 表单句柄,甚至不需要关注应用程序。它的工作方式应该是我可以简单地从设备获取数据而不需要任何用户交互或关注应用程序,这样它就可以在 .NET 控制台应用程序中工作。

我发现的一个非常有趣的库是 HID.NET 库 (https://github.com/MelbourneDeveloper/Device.Net), one of the issues with this library is that I get the same issue as this guy (https://github.com/MelbourneDeveloper/Device.Net/issues/88)。 所以它声明访问被拒绝打开设备进行读取。

这意味着我也不能使用这个库。

因此我觉得也许这里有人可以进一步帮助我。我想要进一步解决这个问题的任何方向。

非常感谢。

非常奇怪,微软选择以所谓的“独占模式”打开这些类型的设备,参见: https://docs.microsoft.com/en-us/windows-hardware/drivers/hid/hid-architecture#hid-clients-supported-in-windows

这表明这些设备以独占模式打开:

  • 鼠标class驱动和mapper驱动
  • Keyboard / Keypad class 驱动程序和 mapper 驱动程序
  • 外部笔设备
  • 集成笔设备
  • 触摸屏
  • 精密触摸板 (PTP)

关于这种独占模式,他们声明如下:

在前面的 table 中,输入 HID 客户端的访问模式是独占的,以防止其他 HID 客户端在不是该输入的目标接收者时拦截或接收全局输入状态。因此,出于安全原因,RIM(原始输入管理器)以独占方式打开所有此类设备。

如果RIM(原始输入管理器)以独占模式打开设备,用户仍然可以在不请求读写权限的情况下打开HID设备界面,并通过HIDClass支持例程获取HID设备信息(HidD_GetXxx)。

这意味着我正在尝试做的事情是,接收 USB-HID 包裹永远不会(?)被允许,因此不是一个选项。 为了实现我想要的功能,可以选择将驱动程序切换到自定义 HID 或 COMport。