Sign in to follow this  
Followers 0
PedroWarlock

controlling joystick buttons

2 posts in this topic

Hello! I would like to be sent the 7 key 2 times, so I tried it with the help of this script:

(I'm Brazilian and not speak much English ... if I said something wrong, then correct me)

;================================================================
; Identificação dos joystick's 0=joy2, 1=joy2, 2=joy3, 3=joy4...
;================================================================
If Not FileExists(".\Joysticks.ini") Then; verifica se o arquivo existe e se não existir cria o arquivo
FileWriteLine(".\Joysticks.ini", "[identificação] --> Se não reconhecer use o comando DXDIAG para ver a ID do seu joystick "); grava no arquivo
FileWriteLine(".\Joysticks.ini", ""); grava uma linha em branco
FileWriteLine(".\Joysticks.ini", "Joystick_1 = 0"); grava ID do joystick 1
FileWriteLine(".\Joysticks.ini", "Joystick_2 = 1"); grava ID do joystick 2
EndIf
Local $tJOYINFO1, $stSTR; informações dos joysticks
Local $sJOYID1 = IniRead(".\Joysticks.ini", "identificação", "Joystick_1", ""); identifica o joystick 1
;Local $sJOYID2 = IniRead(".\Joysticks.ini", "identificação", "Joystick_2", "") ; identifica o joystick 2
$stSTR = "int x;int y;int z;int buttons"
$tJOYINFO1 = DllStructCreate($stSTR); Cria uma estrutura a ser utilizada em DllCall p/ joystick 1
;$tJOYINFO2 = DllStructCreate($stSTR); Cria uma estrutura a ser utilizada em DllCall p/ joystick 2
; Quando usar operações binárias tipo:
; --> If BitAnd($Val, 128)
; use dessa forma:
; --> If $Val - 128 > 0, é duas vezes mais rápida!!!
; Switch é rápido, Select também é (porém mais lento) e If é extremamente lento (principalmente em uma única linha!!!)
While 1
DllCall("winmm.dll", "int", "joyGetPos", "int", $sJOYID1, "ptr", DllStructGetPtr($tJOYINFO1)); solicita função dll
$vBT_Joy1 = DllStructGetData($tJOYINFO1, "buttons"); Retorna os dados dos botões player 1
Select
  Case $vBT_Joy1 - 1 = 0 ; BitAND($vBT_Joy1, 1)
   MsgBox("", "OK", "O botão 1 do joystick 1 foi pressionado", 2);botão 1
  Case $vBT_Joy1 - 2 = 0 ; BitAND($vBT_Joy1, 2)
   MsgBox("", "OK", "O botão 2 do joystick 1 foi pressionado", 2);botão 2
  Case $vBT_Joy1 - 4 = 0 ; BitAND($vBT_Joy1, 4)
   MsgBox("", "OK", "O botão 3 do joystick 1 foi pressionado", 2);botão 3
  Case $vBT_Joy1 - 8 = 0 ; BitAND($vBT_Joy1, 8)
   MsgBox("", "OK", "O botão 4 do joystick 1 foi pressionado", 2);botão 4
  Case $vBT_Joy1 - 16 = 0 ; BitAND($vBT_Joy1, 16)
   MsgBox("", "OK", "O botão 5 do joystick 1 foi pressionado", 2);botão 5
  Case $vBT_Joy1 - 32 = 0 ; BitAND($vBT_Joy1, 32)
         MsgBox("", "OK", "O botão 6 do joystick 1 foi pressionado", 2);botão 6
 
   Case $vBT_Joy1 - 64 = 0 ;BitAND($vBT_Joy1, 64)
Send ($vBT_Joy1 - 64 = 0)    ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<!!!!!!!!! tried to put it here, but it did not work!!!!!!!!!!!!!!
sleep (300)
send ($vBT_Joy1 - 64 = 0)  











   ;MsgBox("", "OK", "O botão 7 do joystick 1 foi pressionado", 2);botão 7
  Case $vBT_Joy1 - 128 = 0 ; BitAND($vBT_Joy1, 128)
   MsgBox("", "OK", "O botão 8 do joystick 1 foi pressionado", 2);botão 8
  Case $vBT_Joy1 - 256 = 0 ; BitAND($vBT_Joy1, 256)
   MsgBox("", "OK", "O botão 9 do joystick 1 foi pressionado", 2);botão 9
EndSelect
;$iY1 = DllStructGetData($tJOYINFO1, "y"); Retorna os dados cima e baixo player 1
;$iX1 = DllStructGetData($tJOYINFO1, "x"); Retorna os dados esquerda e direita player 1
;Select
; Case $iY1 = 0
;  MsgBox("", "OK", "a seta para cima do joystick 1 foi pressionada", 2); cima player 1
; Case $iY1 = 32767
;  MsgBox("", "OK", "a seta para baixo do joystick 1 foi pressionada", 2); 32767 = joystick físico e 35999 = joystick virtual
; Case $iX1 = 0
;  MsgBox("", "OK", "a seta para esq. do joystick 1 foi pressionada", 2); esquerda player 1
; Case $iX1 = 32767
;  MsgBox("", "OK", "a seta para dir. do joystick 1 foi pressionada", 2); 32767 = joystick físico e 35999 = joystick virtual
;EndSelect
; DllCall("winmm.dll", "int", "joyGetPos", "int", $sJOYID2, "ptr", DllStructGetPtr($tJOYINFO2)); solicita função dll
; $vBT_Joy2 = DllStructGetData($tJOYINFO2, "buttons"); Retorna os dados dos botões player 2
; Select
;  Case $vBT_Joy2 - 1 > 0 ; BitAND($vBT_Joy1, 1)
;   MsgBox("", "OK", "O botão 1 do joystick 2 foi pressionado", 2);botão 1
;  Case $vBT_Joy2 - 2 > 0 ; BitAND($vBT_Joy1, 2)
;   MsgBox("", "OK", "O botão 2 do joystick 2 foi pressionado", 2);botão 2
;  Case $vBT_Joy2 - 4 > 0 ; BitAND($vBT_Joy1, 4)
;   MsgBox("", "OK", "O botão 3 do joystick 2 foi pressionado", 2);botão 3
;  Case $vBT_Joy2 - 8 > 0 ; BitAND($vBT_Joy1, 8)
;   MsgBox("", "OK", "O botão 4 do joystick 2 foi pressionado", 2);botão 4
;  Case $vBT_Joy2 - 16 > 0 ; BitAND($vBT_Joy1, 16)
;   MsgBox("", "OK", "O botão 5 do joystick 2 foi pressionado", 2);botão 5
;  Case $vBT_Joy2 - 32 > 0 ; BitAND($vBT_Joy1, 32)
;   MsgBox("", "OK", "O botão 6 do joystick 2 foi pressionado", 2);botão 6
;  Case $vBT_Joy2 - 64 > 0 ; BitAND($vBT_Joy1, 64)
;   MsgBox("", "OK", "O botão 7 do joystick 2 foi pressionado", 2);botão 7
;  Case $vBT_Joy2 - 128 > 0 ; BitAND($vBT_Joy1, 128)
;   MsgBox("", "OK", "O botão 8 do joystick 2 foi pressionado", 2);botão 8
;  Case $vBT_Joy2 - 256 > 0 ; BitAND($vBT_Joy1, 256)
;   MsgBox("", "OK", "O botão 9 do joystick 2 foi pressionado", 2);botão 9
; EndSelect
; $iY2 = DllStructGetData($tJOYINFO2, "y"); Retorna os dados cima e baixo player 2
; $iX2 = DllStructGetData($tJOYINFO2, "x"); Retorna os dados esquerda e direita player 2
; Select
;  Case $iY2 = 0
;   MsgBox("", "OK", "a seta para cima do joystick 2 foi pressionada", 2); cima player 1
;  Case $iY2 > 32767
;   MsgBox("", "OK", "a seta para baixo do joystick 2 foi pressionada", 2); 32767 = joystick físico e 35999 = joystick virtual
;  Case $iX2 = 0
;   MsgBox("", "OK", "a seta para esq. do joystick 2 foi pressionada", 2); esquerda player 1
;  Case $iX2 > 32767
;   MsgBox("", "OK", "a seta para dir. do joystick 2 foi pressionada", 2); 32767 = joystick físico e 35999 = joystick virtual
; EndSelect
; GUIGetMsg() por si só, já deixa a CPU aliviada e não rouba tempo do usuário...
GUIGetMsg() ; Sleep(50); dá um intervalo de 50 milisegundos
WEnd
$tJOYINFO1 = 0;libera a memoria alocada pela estrutura do joystick 1
$tJOYINFO2 = 0 ;libera a memoria alocada pela estrutura do joystick 2
Exit (0); encerra o script

Share this post


Link to post
Share on other sites



Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0