Comment "mettre" GetKeyState "à zéro" ?

Résolu
hibouman Messages postés 13 Date d'inscription dimanche 1 juin 2003 Statut Membre Dernière intervention 21 juin 2006 - 31 mai 2006 à 20:10
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 1 juin 2006 à 08:04
hello,

je débute en c# et j'ai importé la dll qui me permet d'utiliser GetKeyState.
Voilà le probleme:
Je veux que mon prg affiche une messagebox lorsque l'utilisateur presse la touche ESPACE (QUELQUE SOIT L'ENDROIT , donc pas forcement sur une form).
J'ai donc ecrit:

if(GetKeyState(0x20) == 1)  MessageBox.Show("espace enfoncé");

Le probleme c'est que ça ne marche qu'une fois sur 2 car celà ne signifie pas " si l'utilisateur presse la touche espace" mais " si la touche espace est enfoncée".
Si je presse la touche espace avant de lancer le prg, 1 fois sur 2 windows  m'affiche "espace enfoncé" car il garde cette pression en mémoire.
Comment faire ? j'ai lu un truc sur SetKeyboardState mais je ne vois pas comment faire

Merci !

2 réponses

hibouman Messages postés 13 Date d'inscription dimanche 1 juin 2003 Statut Membre Dernière intervention 21 juin 2006
31 mai 2006 à 21:04
aillait j'ai trouvé !!!!!!

il suffisait d'ecrire:
if(GetAsyncKeyState(0x20) != 0)  MessageBox.Show("espace enfoncé");
et non
if(GetKeyState(0x20) == 1)  MessageBox.Show("espace enfoncé");

Ca me semble tres important car bcp de gens ont du avoir ce probleme et il n'y a pas de reponse sur le net !!! du moins tres difficilement trouvable...
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 42
1 juin 2006 à 08:04
Pour être précis il faut tester le bit le plus élèvé, sachant que le bit le plus faible peut aussi avoir une signification pour les touches commes CapsLock qui reste vérouillée.

if ( ( GetKeyState( 0x20 ) & 0x8000 ) == 0x8000 )
0