Page 1 sur 1

GetAsyncKeyState_

Publié : mar. 16/févr./2010 13:15
par Kwai chang caine
Bonjour à tous

GetAsyncKeyState_ ça s'utilise sans le cuisiner ??
Parce que j'ai la sensation qu'il garde en "memoire" quelque chose ??? :roll:

Ou bien que y'a deux parametres qui se suivent, car quand j'en met deux de suite ça marche et un seul, il fait comme si je continuais a appuyer, .......le gougnafier (Tiens ça rime) 8O

Peut etre faut il vider le buffer, ou un truc comme ça, avant de l'utiliser ??? :roll:

J'y pense aussi je fais deux teste de suite comme ça, ç'est peut etre la qu'est l'os, hélas ?? :roll:

Code : Tout sélectionner

If GetAsyncKeyState_(#VK_LBUTTON)
   If GetAsyncKeyState_(#VK_CONTROL)
++++
++++
+++
Endif
Endif
Merci de vos lumieres :wink:

Re: GetAsyncKeyState_

Publié : mar. 16/févr./2010 13:34
par Cls
Salut KCC,

en fait GetAsyncKeyState renvoi l'état de la touche au moment de l'appel à la fonction. Si deux appels à cette fonction sont trop "proches" dans le temps, ils renverront la même valeur. Y'en plus d'infos ici : http://msdn.microsoft.com/en-us/library ... 85%29.aspx Normalement pas besoin "de le cuisiner" ;)

Il peut être utile de "temporiser" les appels en fonction de ce que tu souhaites faire.

Re: GetAsyncKeyState_

Publié : mar. 16/févr./2010 13:44
par Kwai chang caine
Bonjour CLS content de te parler 8)

C'est peut etre ça...il sont trop pret, car ils sont juste a la suite l'un de l'autre :roll:

Car comme ça ...ça marche pas

Code : Tout sélectionner

If GetAsyncKeyState_(#VK_LBUTTON)
   If GetAsyncKeyState_(#VK_CONTROL)
++++
++++
+++
Endif
Endif
Et comme ça ...avec un debug, ça marche 8O

Code : Tout sélectionner

If GetAsyncKeyState_(#VK_LBUTTON)
 Debug GetAsyncKeyState_(#VK_CONTROL)
   If GetAsyncKeyState_(#VK_CONTROL)
++++
++++
+++
Endif
Endif

Re: GetAsyncKeyState_

Publié : mar. 16/févr./2010 14:20
par Cls
Si je comprends bien tu veux intercepter le Ctrl + click gauche. Tu peux faire ainsi :

Code : Tout sélectionner

#APPUI = -32767
#APPUI_LONG = 32768

Repeat

  click_gauche = GetAsyncKeyState_(#VK_LBUTTON)
  control = GetAsyncKeyState_(#VK_CONTROL)
  
  If click_gauche = #APPUI And (control = #APPUI Or control = #APPUI_LONG)
    Debug "Ctrl + click gauche"
    End
  EndIf
  
  Delay(10)
ForEver

Re: GetAsyncKeyState_

Publié : mar. 16/févr./2010 14:36
par Kwai chang caine
C'est un tout petit peu plus compliqué que ça.
Je veux detecter le clic gauche et aussi le clic gauche + CTRL

J'ai modifié ton code
Avec un ElseIf, et seulement dans cet ordre, ça a l'air de marcher :roll:

Code : Tout sélectionner

#APPUI = -32767
#APPUI_LONG = 32768

Repeat

  click_gauche = GetAsyncKeyState_(#VK_LBUTTON)
  control = GetAsyncKeyState_(#VK_CONTROL)
    
  If click_gauche = #APPUI And (control = #APPUI Or control = #APPUI_LONG)
    Debug "Ctrl + click gauche"
  ElseIf click_gauche = #APPUI 
    Debug "Click gauche seul"
  EndIf
  
  Delay(10)
ForEver²

Re: GetAsyncKeyState_

Publié : mar. 16/févr./2010 15:23
par Kwai chang caine
Bon je viens de trouver une combine sur le US de dare, pour vider le tampon clavier
Bien qu'ils disent que cela ne s'appelle pas comme ça..enfin si j'ai compris :roll:
http://www.purebasic.fr/english/viewtop ... 67#p231767

Code : Tout sélectionner

ClearBuffer = AllocateMemory(256)
     
     If ClearBuffer
      SetKeyboardState_(ClearBuffer)
      FreeMemory(ClearBuffer)
     EndIf 
     
     
Je l'ai rajouté entre les deux comme ça et ça a l'air de marcher :roll:

Code : Tout sélectionner

If GetAsyncKeyState_(#VK_LBUTTON)

     ClearBuffer = AllocateMemory(256)
     
     If ClearBuffer
      SetKeyboardState_(ClearBuffer)
      FreeMemory(ClearBuffer)
     EndIf 
          
 If GetAsyncKeyState_(#VK_CONTROL)
Parce que j'ai essayé de modifier ma condition comme tu viens de me donner, mais vu que c'est tout imbriqué, j'arrive pas a m'en sortir :oops: