Diese Möglichkeit besteht über die Mid- und Pid-Felder der JOYCAPS Struktur. Wenn man diese Felder zu einem String:
Code: Alles auswählen
VID_PID_Id = "VID_" + RSet(Hex(JoyStickCaps\Mid,#PB_Word),4,"0") + "&PID_" + RSet(Hex(JoyStickCaps\Pid,#PB_Word),4,"0")
;dabei ist JoyStickCaps mein JOYCAPS-Feld
Code: Alles auswählen
SubKey = "SYSTEM\CurrentControlSet\Control\MediaProperties\PrivateProperties\Joystick\OEM\" + VID_PID_Id
Im PureBasic-Programm bekomme ich den Namen des Logitech-Joysticks aber nur angezeigt, wenn ich bei der API-Funktion 'RegOpenKeyEx' das Flag #KEY_READ benutze. Will ich den Saitek-Joystick-Namen auslesen, muß ich das Flag #KEY_ALL_ACCESS benutzen. Für den Speed-Link Joystick muß das Flag #KEY_QUERY_VALUE verwendet werden. Mit keinem der einzelnen Flags (oder einer Kombination) bekomme ich alle 3 Joystick-Namen angezeigt. Offenbar liegt das an unterschiedlichen Berechtigungen der Registry-Keys. Die spezialisierten Abfragen reichen zwar für meine 3 Joysticks (ich rufe einfach alle 3 Fälle auf), es ist aber etwas unbefriedigend, da ich das gerne für den allgemeinen Fall gelöst hätte.
Meine Frage ist: Kann mir da jemand einen Tipp geben, wie man das allgemein oder besser oder auch ganz anders löst?
Anmerkung: Ich habe mir auch die offenbar neuere API-Funktion 'RegGetValueA' der ADVAPI32.DLL zugänglich gemacht (statt der Folge RegOpenKeyEx, RegQueryValueEx, RegCloseKey). Auch die verhält sich ähnlich und liefert (erwartungsgemäß) nicht für alle Joysticks die Namen.