2012-09-29 20 views
9

Sto passando un'applicazione da DirectInput a RawInput per la gestione del gamepad e mi piacerebbe presentare una descrizione leggibile da ogni gamepad. L'ideale sarebbe il testo del dispositivo che appare in Gestione dispositivi, ma anche la descrizione del prodotto USB. Qualsiasi metodo dovrebbe funzionare senza l'autorizzazione dell'amministratore.Come ottenere il nome leggibile dall'uomo per il dispositivo HID RawInput?

Finora ho trovato uno set of clues: sembra esserci un campo di testo nel registro sotto HKLM\SYSTEM\CurrentControlSet\Control\MediaProperties\PrivateProperties\Joystick\OEM, che è lo stesso del nome fornito da DirectInput. Questo non è perfetto - ho un gamepad che appare in inglese in Gestione dispositivi, ma elenca come 氀 nel registro.

C'è un modo per ottenere dalla MANIGLIA fornita da WM_INPUT alla descrizione del gestore dispositivo? HidD_GetProductString sembra promettente, ma non so come ottenere l'handle di raccolta di primo livello Hid dall'handle RawInput.

Edit: Ho un percorso dell'istanza dispositivo (es \\?\HID#VID_1267&PID_A001#8&1d630df6&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}, che può essere sufficiente per estrarre le informazioni che mi servono da SetupAPI Qualcuno sa come raggiungere questo dato un percorso dell'istanza

risposta

2

ho..? state avendo un problema simile e credo ho trovato una possibile soluzione.

sembra è necessario richiamare CreateFile con il nome che RawInput offre di chiamare GetRawInputDeviceInfo con RIDI_DEVICENAME come argomento del parametro uiCommand. Questo vi darà un handle per il dispositivo con che puoi chiamare 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); 
} 

Tuttavia, sembra che HidD_GetProductString non riesce in un maggior parte dei dispositivi collegati sul mio sistema e sembra solo per avere successo per la mia tastiera USB e una webcam. Non riesce per il mio mouse USB. Non ho ancora scoperto perché sia ​​così, ma forse il mio progresso ti aiuterà.