Seite 1 von 1
Joystickname herrausfinden wie er in Windows angezeigt wird
Verfasst: 19.10.2014 11:06
von 3dhubiflieger
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
Verfasst: 19.10.2014 11:50
von STARGÅTE
Den Namen kannst du aus der Registry herausfinden.
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)
Next
Controller (XBOX 360 For Windows)
Re: Joystickname herrausfinden wie er in Windows angezeigt w
Verfasst: 19.10.2014 13:38
von 3dhubiflieger
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 ?
Re: Joystickname herrausfinden wie er in Windows angezeigt w
Verfasst: 19.10.2014 17:07
von STARGÅTE
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.
Re: Joystickname herrausfinden wie er in Windows angezeigt w
Verfasst: 19.10.2014 20:21
von 3dhubiflieger
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
Re: Joystickname herrausfinden wie er in Windows angezeigt w
Verfasst: 21.10.2014 16:39
von 3dhubiflieger
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