2012-09-29 103 views
9

我正在將應用程序從DirectInput切換到RawInput以進行遊戲手柄處理,並且我想爲每個遊戲手柄提供一個人類可讀的說明。理想情況是設備管理器中出現的設備文本,但USB產品說明也可以。任何方法都應該在沒有管理員權限下工如何爲RawInput HID設備獲取人類可讀的名稱?

到目前爲止,我發現了一個set of clues:在註冊表中似乎有一個文本字段HKLM\SYSTEM\CurrentControlSet\Control\MediaProperties\PrivateProperties\Joystick\OEM,它與DirectInput提供的名稱相同。這並不完美 - 我在設備管理器中以英文顯示遊戲手柄,但在註冊表中列爲氀。

有沒有辦法從WM_INPUT提供的HANDLE到設備管理器描述? HidD_GetProductString看起來很有希望,但我不知道如何從RawInput句柄獲取Hid頂級集合句柄。

編輯:我有一個設備實例路徑(例如\\?\HID#VID_1267&PID_A001#8&1d630df6&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030},這可能足以提取我從SETUPAPI需要的信息是否有人知道如何達到這個給定一個實例路徑

回答

2

我有。?已經有類似的問題,我相信我發現了一個潛在的解決方案。

看來你必須調用CreateFile與RawInput從調用GetRawInputDeviceInfoRIDI_DEVICENAME作爲uiCommand參數的參數提供的名稱。這會給你一個設備句柄與您可以撥打HidD_GetProductString

wchar_t DeviceName[126]; 
HANDLE HIDHandle = CreateFile(RawInputDeviceName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL); 
if(HIDHandle) 
{ 
    BOOLEAN Result = HidD_GetProductString(HIDHandle, DeviceName, sizeof(wchar_t) * 126); 
    CloseHandle(HIDHandle); 
} 

然而,似乎HidD_GetProductString未能在多數附上了我的系統上的設備,並似乎只適用於USB鍵盤和網絡攝像頭成功。我的USB鼠標沒有成功。我還沒有發現這是爲什麼,但也許我的進步會幫助你。