Ich wechsle eine Anwendung von DirectInput zu RawInput für Gamepad-Handhabung, und ich würde gerne eine lesbare Beschreibung für jedes Gamepad präsentieren. Ideal wäre der Gerätetext, der im Gerätemanager angezeigt wird, aber auch die USB-Produktbeschreibung. Jede Methode sollte ohne Administratorrechte funktionieren.
Bisher habe ich eine gefunden Satz von Hinweisen : Es scheint ein Textfeld in der Registrierung unter HKLM\SYSTEM\CurrentControlSet\Control\MediaProperties\PrivateProperties\Joystick\OEM
zu geben, das mit dem von DirectInput angegebenen Namen übereinstimmt. Das ist nicht perfekt - ich habe ein Gamepad, das im Gerätemanager auf Englisch erscheint, aber in der Registrierung als 氀 aufgeführt ist.
Gibt es eine Möglichkeit, von dem von WM_INPUT
bereitgestellten HANDLE zur Beschreibung des Gerätemanagers zu gelangen? HidD_GetProductString
sieht vielversprechend aus, aber ich Ich weiß nicht, wie Sie das Hid-Handle für die oberste Ebene der Sammlung aus dem RawInput-Handle abrufen können.
Edit: Ich habe einen Device-Instanz-Pfad (zB \?\HID#VID_1267&PID_A001#8&1d630df6&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
, was ausreichen kann, um die benötigten Informationen aus der SetupAPI zu extrahieren. Weiß jemand, wie man dies bei einem Instanzpfad erreicht?
Ich habe ein ähnliches Problem und glaube, dass ich eine mögliche Lösung gefunden habe.
Offenbar müssen Sie CreateFile
mit dem Namen aufrufen, den RawInput von GetRawInputDeviceInfo
mit RIDI_DEVICENAME
als Argument uiCommand
liefert. Dadurch erhalten Sie ein Handle für das Gerät, mit dem Sie HidD_GetProductString
aufrufen können.
Es scheint jedoch, dass HidD_GetProductString
auf den meisten Geräten, die an meinem System angeschlossen sind, fehlschlägt und nur für meine USB-Tastatur und eine Webkamera erfolgreich zu sein scheint. Das gelingt meiner USB-Maus nicht. Ich habe noch nicht herausgefunden, warum das so ist, aber vielleicht wird mein Fortschritt Ihnen helfen.