Guide Knopf 360 Controll (XBOX Knopf in Mitte) ansprechen

Für allgemeine Fragen zur Programmierung mit PureBasic.
3dhubiflieger
Beiträge: 123
Registriert: 27.10.2013 12:13

Guide Knopf 360 Controll (XBOX Knopf in Mitte) ansprechen

Beitrag von 3dhubiflieger »

Hallo, ich suche noch eine Möglichkeit den Guide Button in der Mitte eines XBOX 360 Gamepads anzusprechen ! Wie heisst die Funktion in der Xinput.dll ? Hat jemand dazu Infos ? Ich würde dieses Feature noch gern in mein Programm http://joystartend.npage.de integrieren. Ich habe den Thread Guidecall http://forum.xbmc.org/printthread.php?tid=164695 gefunden. Also muss es irgendwo eine Möglichkeit geben diese Button anzusprechen.
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: Guide Knopf 360 Controll (XBOX Knopf in Mitte) anspreche

Beitrag von Chimorin »

PB bietet die Möglichkeit, alle Funktionen einer DLL auflisten zu lassen. Du könntest dir ein Programm schreiben, welches genau das macht. Werden aber vermutlich ziemlich viele Funktionen sein, welche du eventuell mit "Regular Expressions" auf "Guide" "Button" und sonstigen Wörtern in der Masse verkleinern könntest.

Oder eben Googlen (Was du aber ziemlich sicher schon getan hast) :D
Bild

- formerly known as Bananenfreak -
3dhubiflieger
Beiträge: 123
Registriert: 27.10.2013 12:13

Re: Guide Knopf 360 Controll (XBOX Knopf in Mitte) anspreche

Beitrag von 3dhubiflieger »

So, nach einer weiteren Suche habe ich 2 Links gefunden, welche in meine Richtung gehen. Ich hab allerdings keine Ahnung wie ich den jetzt nun genau den Status des Guidebuttons abfragen soll. Bzw ich verstehe die Erklärung mit den Funtionen von 100 - 103 nicht.


#XINPUT_GAMEPAD_GUIDE = $0400 ;Das hab ich schonmal als Konstante herrausgefunden

xinput = OpenLibrary (#PB_Any, "xinput1_3.dll") ;in dieser Dll soll die Funktion drin stecken

;XInputGetstateEx ist undocumentiert. Ist aber das selbe wie XInputGetState blos, das halt
;hier noch der Status des Guidebuttons mit zurückgegeben wird. Oder irre ich mich ???

Guidefunction = GetFunction(xinput, "XInputGetStateEx")

Debug Guidefunction ;jetzt müsste doch nen Pointer kommen ?? ....zeigt aber 0 an ??


;Hier ab ich die Infos her....Hab noch keine richtige Ahnung von Dlls....Kann mir jemand helfen ?
:lamer:

http://code.google.com/p/x360ce/issues/detail?id=417

http://www.autohotkey.com/board/topic/9 ... de-button/
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Guide Knopf 360 Controll (XBOX Knopf in Mitte) anspreche

Beitrag von ts-soft »

Versuch es mal mit:

Code: Alles auswählen

Guidefunction = GetFunctionEntry(xinput, 100) 
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
3dhubiflieger
Beiträge: 123
Registriert: 27.10.2013 12:13

Re: Guide Knopf 360 Controll (XBOX Knopf in Mitte) anspreche

Beitrag von 3dhubiflieger »

Hallo Ihr fleissigen Helfer ! Habe es dank ts-soft doch tatsächlich geschaft heut noch ne Procedure für den Guidebutton zu schreiben ! Ich hoffe Ihr könnt Sie auch gebrauchen ! Allerdings hab ichs nur nur wegen Deiner Hilfe >ts_soft< und meinen Links hin bekommen ! Hier ist die Procedure (Is übrigens meine erste in Bezug auf Strukturen) Gibt es vielleicht Verbesserungsmöglichkeiten ?...

Code: Alles auswählen

Procedure Guidebutton()
;ermittelt ob der Guidbutton (der Knopf in der Mitte) gedrückt wurde !

Global xinput
#XINPUT_GAMEPAD_GUIDE = $0400 ;Der Guidebutton !!
#DLLDatei             = "xinput1_3.dll"

 Structure XINPUT_GAMEPAD
    wButtons.w
    bLeftTrigger.b
    bRightTrigger.b
    sThumbLX.w
    sThumbLY.w
    sThumbRX.w
    sThumbRY.w
 EndStructure
  
 xinput = OpenLibrary (#PB_Any,#DLLDatei) 
 
 If xinput
   
   CallFunctionFast (GetFunctionEntry(xinput, 100) , 0, @XINPUT_gamepad)
   
   CloseLibrary (xinput)
   
   Variable.Xinput_Gamepad
   If Variable\wbuttons = #XINPUT_GAMEPAD_GUIDE
    ProcedureReturn #True
   Else
    ProcedureReturn #False 
   EndIf  
 EndIf  
 
  ProcedureReturn #False 
EndProcedure


;Hab mal ne Schleife ohne Ende genommen, da ich zu faul war :)  
   Repeat

   
    Debug guidebutton()
     
    
     
   
   ForEver

Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Guide Knopf 360 Controll (XBOX Knopf in Mitte) anspreche

Beitrag von ts-soft »

Naja, Strukturen und Konstanten sind immer Global gültig und sind innerhalb einer Procedure deshalb auch deplaziert.
Prototypes sind den CallFunction... immer vorzuziehen.
Also grob überarbeitet:

Code: Alles auswählen

#XINPUT_GAMEPAD_GUIDE = $0400 ;Der Guidebutton !!
#DLLDatei             = "xinput1_3.dll"

Structure XINPUT_GAMEPAD
  wButtons.w
  bLeftTrigger.b
  bRightTrigger.b
  sThumbLX.w
  sThumbLY.w
  sThumbRX.w
  sThumbRY.w
EndStructure

Prototype guidbutton(UserIndex.l, *pState.XINPUT_GAMEPAD)

Procedure Guidebutton()
  ;ermittelt ob der Guidbutton (der Knopf in der Mitte) gedrückt wurde !
  
  Protected xinput, getguidbutton.guidbutton, x_struct.XINPUT_GAMEPAD
  
  xinput = OpenLibrary (#PB_Any, #DLLDatei)
  
  If xinput
    
    getguidbutton = GetFunctionEntry(xinput, 100)
    getguidbutton(0, @x_struct)
    CloseLibrary (xinput)
    
    If x_struct\wbuttons = #XINPUT_GAMEPAD_GUIDE
      ProcedureReturn #True
    Else
      ProcedureReturn #False
    EndIf 
  EndIf 
  
  ProcedureReturn #False
EndProcedure
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten