Aide sur les api c++

Résolu/Fermé
chabacha109 Messages postés 268 Date d'inscription samedi 11 décembre 2010 Statut Membre Dernière intervention 14 mai 2012 - Modifié par chabacha109 le 5/02/2011 à 18:48
chabacha109 Messages postés 268 Date d'inscription samedi 11 décembre 2010 Statut Membre Dernière intervention 14 mai 2012 - 15 févr. 2011 à 12:57
Bonjour,





Bref mon code :

#include<iostream.h> 
#include<windows.h> 
#include <stdio.h> 



void main()  
{  
while(1)  
{  

   for(int i=48;i=57;i++)  
     {  
       if(GetAsyncKeyState(i)==-32767&&GetAsyncKeyState(16)==-32767)//le 16 est le code d'acii de shift et les 48 jusqu'à 57 sont les code d'acii des touches 1,2,3,4....9,0     
       printf("%c \n",i) ;  
     }  

 }  
} 


GetAsyncKeyState(i)==-32767//cad que la touche ayant le code d'acii i est presser  



Fonctionnement:
l'orsque j'appuie sur les touches 1,2,3,4....9,0 en paralléle avec le shift il affiche l'entier presser ,(les touches concernées ne son pas les verr num ok)

bon, ca marche mais ya quelle que chose qui ma bloqué , j'explique

lorsque j'appuie sur le shift et la touche "2"(par exemple) dans une période de temps sans lever la main il m'affiche
2 seulement

en principe ça me donne une chose comme ceci:2222222222222

honnêtement j'ai copié le " GetAsyncKeyState(x)==-32767" tel qu'il est ,
ils ont me dit sur un forum quelle va tester sur le bouton de clavier, si elle retourne
-32767 donc le bouton ayons le code ascii x est activé.

D'autre coté, ya quelqu'un qui m'a dit qu'il faut tester sur le bit du poids fort et le bit de poids faible...méme j'ai fait un tour sur le msdn, j'ai pas compris en fin :( , en fait ya pas d'explication avec exemple pour comprendre.....

mais j'ai essayé moi même :

#include<iostream.h>  
#include<windows.h>  
#include <stdio.h>  

void sleep(..)  
{.....}  

void main()  
{  
while(1)  
{  

for(int i=48;i=57;i++)  
{  
if(GetAsyncKeyState(i)&&GetAsyncKeyState(16))  
printf("%c \n",i) ;  
sleep(1);//attente active 1ms  
}  

}  
} 


il marche bien heureusement mais :
1- je veux savoir comment tester sur les bit du poids fort et faible
2-quelle est le rapport entre la version 2 et 1
3-merci de ta réponse :)))

1 réponse

Bonjour,
Pas la peine de faire un nouveau post, j'allais te répondre sur l'ancien.

La valeur en sortie de ta fonction est un short signé.
Le short est sur deux octets (2 fois 8 bits), et le premier bit est le signe.

Le bit de poids fort est celui qui a la plus grande valeur (donc celui de gauche), et donc celui de poids faible est celui de droite.

Ici, tu as recopié "-32767" sans chercher à comprendre. Mais tu aurais dû chercher à comprendre et remarquer que -32767 c'est la valeur binaire 11111111 11111111.

Donc pour tester le bit de poids fort, il faut tester la valeur 11111111 00000000.
Et pour tester le bit de poids faible, il faut tester la valeur 00000000 11111111.

A l'aide d'une simple calculatrice windows, tu convertis ces valeurs binaires en short signé :
Bit de poids fort = -32512
Bit de poids faible = 255

Concernant la différence entre les deux versions de ton code ;
La première version est GetAsyncKeyState(i)==-32767
Et la deuxième, sans mettre de 'condition explicite' revient à faire GetAsyncKeyState(i)!=0

Cordialement, M.
0
chabacha109 Messages postés 268 Date d'inscription samedi 11 décembre 2010 Statut Membre Dernière intervention 14 mai 2012 9
15 févr. 2011 à 12:57
merci beaucoup swed , c'est claire , en fait j'ai résolu le problème
0