Joystickname herrausfinden wie er in Windows angezeigt wird
-
3dhubiflieger
- Beiträge: 123
- Registriert: 27.10.2013 12:13
Joystickname herrausfinden wie er in Windows angezeigt wird
So nachdem ich mit Stargate mein Problem lösen konnte. Habe ich jetzt das Problem den Namen des Joysticks herauszufinden so wie er in Windows bei der Auflistung aller Controller benannt wird. Mit Joycaps krieg ich ja nur den Joysticktreibernamen herraus. Gibts es da ne Apifunktion ? Hab die ganze Zeit gegoogelt aber noch nix gefunden....
Re: Joystickname herrausfinden wie er in Windows angezeigt w
Den Namen kannst du aus der Registry herausfinden.
Ich hab dir jetzt mal den code aus meinem Joystick-Include kopiert:
Ich hab dir jetzt mal den code aus meinem Joystick-Include kopiert:
Code: Alles auswählen
Structure Joystick
Capabilities.JOYCAPS
Name.s
Axis.f[8]
Deadzone.f[8]
PushedButtons.l
ButtonTime.i[16]
ButtonEvent.i[16]
PointOfView.f
EndStructure
Structure JoystickInclude
Array Joystick.Joystick(15)
Devices.i
JoystickInfo.JOYINFOEX
EndStructure
Global JoystickInclude.JoystickInclude
Procedure InitJoysticks()
Protected Index.i, Path.s, *Key, Type.i, Length.i, *Buffer
With JoystickInclude
\JoystickInfo\dwSize = SizeOf(JOYINFOEX)
\JoystickInfo\dwFlags = #JOY_RETURNALL
For Index = 0 To 15
If joyGetDevCaps_(Index, @\Joystick(Index)\Capabilities, SizeOf(JOYCAPS)) = #JOYERR_NOERROR
Path = "SYSTEM\CurrentControlSet\Control\MediaProperties\PrivateProperties\Joystick\OEM\"+
"VID_"+RSet(Hex(JoystickInclude\Joystick(Index)\Capabilities\wMid,#PB_Word),4,"0")+"&PID_"+RSet(Hex(JoystickInclude\Joystick(Index)\Capabilities\wPid,#PB_Word),4,"0")
If RegOpenKeyEx_(#HKEY_LOCAL_MACHINE, Path, #Null, #KEY_READ, @*Key) = #ERROR_SUCCESS
If RegQueryValueEx_(*Key, "OEMName", #Null, @Type, #Null, @Length) = #ERROR_SUCCESS
If Type = #REG_SZ
*Buffer = AllocateMemory(Length)
RegQueryValueEx_(*Key, "OEMName", #Null, @Type, *Buffer, @Length)
\Joystick(Index)\Name = PeekS(*Buffer)
FreeMemory(*Buffer)
EndIf
EndIf
RegCloseKey_(*Key)
EndIf
\Devices + 1
EndIf
Next
EndWith
EndProcedure
Procedure.s JoystickLabel(Joystick.i)
ProcedureReturn JoystickInclude\Joystick(Joystick)\Name
EndProcedure
;- Beispiel
Define I.i
InitJoysticks()
For I = 0 To 15
Debug JoystickLabel(I)
NextController (XBOX 360 For Windows)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
-
3dhubiflieger
- Beiträge: 123
- Registriert: 27.10.2013 12:13
Re: Joystickname herrausfinden wie er in Windows angezeigt w
Hey cool Stargate !
Mal noch ne Frage...
Wenn ich den Namen abfrage (Schleife unten), ist I dann die ID welche ich bei
JoygetposEx benutze ? Oder anders...Kann ich mich drauf verlassen das I die ID ist und ich daraus den Namen über Joysticklabel bekomme ? Oder muss ich das noch irgendwie gesondert
lösen ?
Wenn ich den Namen abfrage (Schleife unten), ist I dann die ID welche ich bei
JoygetposEx benutze ? Oder anders...Kann ich mich drauf verlassen das I die ID ist und ich daraus den Namen über Joysticklabel bekomme ? Oder muss ich das noch irgendwie gesondert
lösen ?
Code: Alles auswählen
For I = 0 To 15
Debug JoystickLabel(I)
Next
Re: Joystickname herrausfinden wie er in Windows angezeigt w
Bei den Joystick-Befehlen von Windows ist das was du meinst keine ID, sondern ein Index.
Ist ein Joystick angeschlossen, liegt dieser auf Index 0.
Bei zwei angeschlossenen Joysticks 0 und 1 ...
Und ja, wenn der Name auf index 0 zurückgegeben wird, dann kannst du mit joyGetPosEx_() und Index 0 auch die Bewegungen abfragen.
Ist ein Joystick angeschlossen, liegt dieser auf Index 0.
Bei zwei angeschlossenen Joysticks 0 und 1 ...
Und ja, wenn der Name auf index 0 zurückgegeben wird, dann kannst du mit joyGetPosEx_() und Index 0 auch die Bewegungen abfragen.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
-
3dhubiflieger
- Beiträge: 123
- Registriert: 27.10.2013 12:13
Re: Joystickname herrausfinden wie er in Windows angezeigt w
Danke Stargate !!!!!!! Habe soeben alle Informationen in mein Programm eingebaut. Endlich kann ich auch nen Gamepad über den Namen auswählen Supi !
Ich denke das ganze hilft anderen auch weiter.
Jetzt muss ich nur noch ne Lösung finden wie ich POV deaktivieren bzw gesondert abfragen kann.
Das Problem - 360 Gamepad mit POV :
#JOY_POVFORWARD ist 0 ...Wenns aktiviert ist. (Kreuz aufm Gamepad)
Jetzt hab ich aber mal nen anderen Controller angeschlossen, ohne POV
Mein Programm denkt nun POV ist aktiviert weil es 0 ist. Der Controller hat aber kein POV.
Folglich wird immer 0 zurückgegeben und das Programm hängt sich auf.
Also muss ich irgendwie davor die Information mit getdevcaps_ abfangen und mit Haspov abfragen.
Ich versuch grad selbst die Lösung zu finden, hast mir ja schon genug geholfen
aber vielleicht gibts ja auch ne ganz simple Lösung. Jedenfalls danke für dein Wissen !
Gruss Kevin
Jetzt muss ich nur noch ne Lösung finden wie ich POV deaktivieren bzw gesondert abfragen kann.
Das Problem - 360 Gamepad mit POV :
#JOY_POVFORWARD ist 0 ...Wenns aktiviert ist. (Kreuz aufm Gamepad)
Jetzt hab ich aber mal nen anderen Controller angeschlossen, ohne POV
Mein Programm denkt nun POV ist aktiviert weil es 0 ist. Der Controller hat aber kein POV.
Folglich wird immer 0 zurückgegeben und das Programm hängt sich auf.
Also muss ich irgendwie davor die Information mit getdevcaps_ abfangen und mit Haspov abfragen.
Ich versuch grad selbst die Lösung zu finden, hast mir ja schon genug geholfen
Gruss Kevin
-
3dhubiflieger
- Beiträge: 123
- Registriert: 27.10.2013 12:13
Re: Joystickname herrausfinden wie er in Windows angezeigt w
So hab mir jetzt das kleine Codeschnipsel zusammengebastelt um POV abzufragen. Jetzt ist der Fehler weg 
Code: Alles auswählen
joyGetDevCaps_(0,joyCaps.JOYCAPS,SizeOf(JOYCAPS))
Debug "Joystick "+Str(u)
If joyCaps\wCaps & #JOYCAPS_HASPOV
Debug "pov"
Else
Debug "kein pov"
EndIf