2013-08-05 143 views
2

首先,我是C#的新手。我想創建一個應用程序,檢測任何USB設備(我已經使用HidLibrary,它檢測到HID),但我想從隱藏輸入(我已經使用Raw input,但不起作用,我認爲它只適用於鍵盤)。例如,如果我連接了一個鼠標,那麼來自該鼠標的任何類型的輸入(移動或點擊)都將導致一個函數運行。使用HidLibrary在C#中檢測來自任何USB HID的輸入

我想知道的是當輸入來自HID時,哪個函數在HidLibrary中執行? 或者如果有比HidLibrary更好的替代方案。 如果你可以提供任何代碼片段,我會非常感謝:)

回答

2

HidLibrary是相當不錯,與我用過的其他人相比,所以嘗試堅持下去。

當數據進來時,它會激發您在初始化HidDevice時分配的「OnReport」處理程序。

E.g.

_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); 
} 
+0

我用你的代碼把我的設備置於讀取模式。當設備處於此模式時,無論我在哪裏調用_myDevice.WriteReport,HIDLibrary都會在NativeMethods.WriteFile中凍結。你知道爲什麼嗎? – RHaguiuda