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

Ait*_*azk 7 c# usb hid

首先,我是 C# 新手。我想创建一个检测任何 USB hid 设备的应用程序(我已经使用了HidLibrary并且它检测了 HID),但我也想从 hid 获取输入(我已经使用了原始输入,但这不起作用,我认为它是唯一的)对于键盘)。例如,如果我连接了鼠标,那么来自该鼠标的任何类型的输入(无论是移动还是单击)都会导致函数运行。

我想知道的是,当输入来自 HID 时,HidLibrary 中会执行哪个函数?或者是否有比 HidLibrary 更好的替代方案。如果您可以提供任何代码片段,我将非常感激:)

Mic*_*ael 6

与我使用过的其他库相比,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); 
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,“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);
}
Run Code Online (Sandbox Code Playgroud)