Comment savoir si une touche reste apuyée ou est lachée? [Résolu]

Signaler
Messages postés
12
Date d'inscription
vendredi 29 juillet 2005
Statut
Membre
Dernière intervention
3 avril 2008
-
Messages postés
12
Date d'inscription
vendredi 29 juillet 2005
Statut
Membre
Dernière intervention
3 avril 2008
-
Bonjour!

Sauriez vous comment faire pour savoir si une touche est maintenue appuyée et quand est ce qu'elle est lachée?

Je programme du C sous DevC++ en mode console et rien d'autre.

Merci!!

5 réponses

Messages postés
12
Date d'inscription
vendredi 29 juillet 2005
Statut
Membre
Dernière intervention
3 avril 2008

Bonjour!
N'ayant pas reussi a faire avec le GetKeyState, j'ai trouve une autre méthode beaucoup plus simple: faire un double getch().En declarant char key1 getch() et char key2 getch(), quand on appuie une fois sur une des touches "fleche", key1 va dire que la touche correspond a une fleche, key2 dira a quelle fleche cette touche correspond. C'est valable pour n'importe que touche spéciale (c'est à dire, toute touche non alphanumerique).
Voila! =)
Merci beaucoup pour votre aide
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
GetKeyState

ULARGE_INTEGERJokyQi=QI("Joky"
Messages postés
12
Date d'inscription
vendredi 29 juillet 2005
Statut
Membre
Dernière intervention
3 avril 2008

Merci beaucoup Joky
Messages postés
12
Date d'inscription
vendredi 29 juillet 2005
Statut
Membre
Dernière intervention
3 avril 2008

Bonjour!
J'ai refait un test pour GetKeyState avec ce code:


  if(GetKeyState(VK_LEFT)<0)

  {

      while(GetKeyState(VK_LEFT)<0)

      {

      printf("Fleche gauche touchee une fois\n");

  }   

  }

  if(GetKeyState(VK_RIGHT)<0)   

  {

      while(GetKeyState(VK_RIGHT)<0)

      {

      printf("Fleche droite touchee une fois\n");

  }   

En utilisant ce test, quand j'appuie une fois sur la fleche droite ou gauche, les messages de test apparaissent pleeeeins de fois.
Comment corriger cela pour que ça n'arrive qu'une seule fois?
Merci!
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Donc quand on veut utiliser une fonction de l' API on se documente bien avant sur msdn par exemple
The GetKeyState function retrieves the status of the specified virtual
key. The status specifies whether the key is up, down, or toggled (on,
off—alternating each time the key is pressed).

SHORT GetKeyState(      

    int nVirtKey
);

Donc on voit que la fonction retourne un SHORT et qu'elle nous informe que l'état de la touche, enfoncée, relâchée, ou activée si la touche concernée et une touche du genre Maj ou Verr Num etc...

Return Value

The return value specifies the status of the specified virtual key, as
follows:

<li>If the high-order bit is 1, the key is down; otherwise, it is up.
</li><li>If the low-order bit is 1, the key is toggled. A key, such as the CAPS LOCK
key, is toggled if it is turned on. The key is off and untoggled if the
low-order bit is 0. A toggle key's indicator light (if any) on the keyboard will
be on when the key is toggled, and off when the key is untoggled.</li>
Donc le bit de poids fort est à 1 si la touche est pressée
Sinon, elle est relâchée

Comment tester le bit de poids fort ???
un SHORT c'est codé sur 16 bits sur un système 32 bits ( les plus courants pour l'instant ) donc
1000 0000 0000 0000

Pour récupérer le bit de poids fort on fait
GetKeyState(VK_LEFT) & 0x8000
Et voilà, tu testes s'il est à 1 ou à 0
ULARGE_INTEGERJokyQi=QI("Joky"