使用HidLibrary检测来自C#中任何USB HID的输入

本文关键字:USB 任何 HID 输入 HidLibrary 检测 使用 | 更新日期: 2023-09-27 18:26:18

首先,我是C#的新手。我想创建一个检测任何usb隐藏设备的应用程序(我使用过HidLibrary,它检测hid),但我也想从隐藏设备中获得输入(我使用了Raw输入,但这不起作用,我认为它只适用于键盘)。例如,如果我连接了一个鼠标,那么该鼠标的任何类型的输入,无论是移动还是单击,都会导致函数运行。

我只想知道,当输入来自HID时,HidLibrary中执行哪个函数?或者是否有比HidLibrary更好的选择。如果你能提供任何代码片段,我将非常感谢:)

使用HidLibrary检测来自C#中任何USB HID的输入

HidLibrary与我使用过的其他库相比相当不错,所以请尝试使用它。

当数据进入时,它会触发初始化HidDevice时分配的"OnReport"处理程序。

例如

_myDevice = HidDevices.Enumerate(myVendorId, myProductId).FirstOrDefault();
if (_myDevice != null)
{
    _myDevice.OpenDevice();
    _myDevice.Inserted += DeviceAttachedHandler;
    _myDevice.Removed += DeviceRemovedHandler;
    _myDevice.MonitorDeviceEvents = true;
    // this is where we start listening for data
    _myDevice.ReadReport(OnReport); 
}

在这种情况下,"OnReport"是事件处理程序的名称,当数据从设备到达时,它将被调用。"OnReport"这个名称不是很有描述性,但示例都使用这个名称,所以我在代码中也使用了这个名称。重要的是,在处理程序结束时,您要求设备在更多数据到达后再次启动,因此OnReport函数中的最后一行再次调用ReadReport。

private void OnReport(HidReport report)
{
    if (attached == false) { return; }
    // process your data here
    var byteFromMyDevice = report.Data[0];
    // we need to start listening again for more data
    _myDevice.ReadReport(OnReport);
}