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 ! :mrgreen: 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 ?

Code: Alles auswählen

For I = 0 To 15
   Debug JoystickLabel(I)
Next

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 ! :bounce: 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