【问题标题】:Detecting input from any USB HID in C# using HidLibrary使用 HidLibrary 在 C# 中检测来自任何 USB HID 的输入
【发布时间】:2013-08-05 04:37:15
【问题描述】:

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

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

【问题讨论】:

    标签: c# usb hid


    【解决方案1】:

    与我用过的其他库相比,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);
    }
    

    【讨论】:

    • 我使用您的代码将我的设备置于读取模式。当设备处于此模式时,无论我在哪里调用 _myDevice.WriteReport,HIDLibrary 都会冻结在 NativeMethods.WriteFile 中。你知道为什么吗?
    猜你喜欢
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 2019-11-01
    • 2015-01-04
    • 2011-01-12
    • 2016-11-03
    相关资源
    最近更新 更多