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

问题描述 投票:0回答:2

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

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

我尝试过几个包/项目,例如:

这些项目专注于从所有键盘获取数据并检查数据来自何处。

现在我真正寻找的是一个库/方法来从这些设备接收数据,而不需要 Windows 窗体句柄,甚至不需要关注应用程序。它应该以这样的方式工作:我可以简单地从设备获取数据,而不需要任何用户交互或关注应用程序,以便它可以从 .NET 控制台应用程序工作。

我发现的一个非常有趣的库是 HID.NET 库(https://github.com/MelbourneDeveloper/Device.Net),这个库的问题之一是我遇到了与这个人相同的问题( https://github.com/MelbourneDeveloper/Device.Net/issues/88)。 因此它表明访问被拒绝打开设备进行读取。

这意味着我也无法使用这个库。

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

提前非常感谢。

c# .net usb .net-6.0 hid
2个回答
1
投票

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

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

  • 鼠标类驱动程序和映射器驱动程序
  • 键盘/小键盘类驱动程序和映射器驱动程序
  • 外接笔设备
  • 集成笔设备
  • 触摸屏
  • 精密触摸板(PTP)

关于这种独占模式,他们是这么说的:

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

如果设备通过 RIM(原始输入管理器)以独占模式打开,用户仍然可以打开 HID 设备接口,而无需请求读写权限,并通过 HIDClass 支持例程 (HidD_GetXxx) 获取 HID 设备信息。

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


0
投票

今年是 2024 年,我还没有在 Visual Studio Code 中遇到过 C# USB-HID 示例。有点神秘。我曾经如何使用 YAT(另一个终端)来通信并从 USB-HID 设备(Mikroelektronica SpeakUp 模块)读取数据。感谢用户的任何评论。

© www.soinside.com 2019 - 2024. All rights reserved.