Etat du clavier

Le
Gloops
Bonjour tout le monde,

Je cherche à réaliser une interface pour afficher l'état de mon cla=
vier
: verrouillage des majuscules, du pavé numérique, du défilement, in=
sertion.

Pour les deux premiers c'est vrai que l'intérêt est un peu limité
puisque les LED sur le clavier fournissent le renseignement, en revanche =

la LED du verrouillage de défilement fournit, sur mon clavier, une
information fausse (correspondant à la bascule opérée par Fn F10, a=
lors
que le verrouillage de défilement s'obtient par Fn F12, et j'ignore à=

quoi correspond Fn 10 -oui je sais je vais regarder sur la notice). Au
demeurant l'état d'insertion est classiquement quelque chose qui
s'affiche dans une application.

J'ai déclaré dans mon formulaire les API GetKeyState et
GetKeyboardState, et je commençais à tourner un peu chèvre avec les=

résultats assez imprévisibles que j'obtenais.

Au bout d'un moment, je me suis aperçu que Visual Studio affiche l'ét=
at
d'insertion du clavier, à droite sur la barre d'état, ce qui m'a perm=
is
de prendre conscience que tant que je n'ai pas lancé mon application
tout va bien, la touche Ins fait alterner les affichages INS et OVR,
mais une fois que j'ai lancé l'application ou même simplement appelé=

GetKeyboardState en le préfixant par Form1, c'est terminé, l'état
d'insertion du clavier tel que renseigné sur la barre d'état semble
verrouillé.

Dans mon application, je réussis effectivement à rendre compte de l'é=
tat
du verrouillage de défilement, ce qui tombe bien puisque c'était
effectivement le but, mais j'aimerais bien comprendre comment il se fait =

que j'achoppe sur les autres points de l'état du clavier.

Le fait de lancer un formulaire .Net, est-ce que ça affecte les API qui=

permettent d'interroger l'état du clavier ? Y a-t-il quelque chose à =

faire pour que l'état soit rafraichi ?

J'ai travaillé avec ces constantes, j'imagine que le problème ne se
situe pas là :
const int VK_SCROLL = 0x91;
const int VK_CAPITAL = 0x14;
const int VK_NUMLOCK = 0x90;
const int VK_INSERT = 0x2D;
const int VK_ATTN = 0xF6;

Bon et puis tant que j'y suis les API :
[DllImport("user32.dll")]
private static extern int GetKeyboardState(byte pbKeyState);

[DllImport("user32.dll")]
private static extern Int16 GetKeyState(int nVirtKey);
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Gloops
Le #20542161
J'arrive au bout pour la plus grande partie.
Je lis l'état du clavier dans la procédure événementielle liée à la
pression d'une touche.
Lorsque je viens de presser une touche de changement d'état (Maj, Ver
num, ins ...), GetKeyState() pour la touche correspondante retourne
1111111100000001 si l'état est mis, 1111111100000000 sinon (dit
autrement, 0xFF01 ou 0xFF00).
Si j'ai pressé une autre touche, la fonction retourne 1 ou 0.
Il convient donc de récupérer le dernier bit comme j'en ai fait éta t
dans le fil suivant, et ça marche. Je dois dire que je ne l'avais pas
compris comme ça du premier coup, pourtant j'ai déjà joué avec ç a en VB6
(il y a quelques années il est vrai).

Seul le verrouillage du pavé numérique est encore un peu rétif, ave c le
même code pourtant. Comme le verrouillage numérique fonctionne puisqu e
je tape bien des chiffres avec le pavé numérique, je me demande si ç a ne
serait pas la constante VK_NUMLOCK qui serait fausse, j'ai
const int VK_NUMLOCK = 0x90;



_____________________________________
Gloops a écrit, le 12/11/2009 12:44 :
Bonjour tout le monde,

Je cherche à réaliser une interface pour afficher l'état de mon c lavier
: verrouillage des majuscules, du pavé numérique, du défilement, insertion.

Pour les deux premiers c'est vrai que l'intérêt est un peu limité
puisque les LED sur le clavier fournissent le renseignement, en revanch e
la LED du verrouillage de défilement fournit, sur mon clavier, une
information fausse (correspondant à la bascule opérée par Fn F10, alors
que le verrouillage de défilement s'obtient par Fn F12, et j'ignore à
quoi correspond Fn 10 -oui je sais je vais regarder sur la notice). Au
demeurant l'état d'insertion est classiquement quelque chose qui
s'affiche dans une application.

J'ai déclaré dans mon formulaire les API GetKeyState et
GetKeyboardState, et je commençais à tourner un peu chèvre avec l es
résultats assez imprévisibles que j'obtenais.

Au bout d'un moment, je me suis aperçu que Visual Studio affiche l'é tat
d'insertion du clavier, à droite sur la barre d'état, ce qui m'a pe rmis
de prendre conscience que tant que je n'ai pas lancé mon application
tout va bien, la touche Ins fait alterner les affichages INS et OVR,
mais une fois que j'ai lancé l'application ou même simplement appel é
GetKeyboardState en le préfixant par Form1, c'est terminé, l'état
d'insertion du clavier tel que renseigné sur la barre d'état semble
verrouillé.

Dans mon application, je réussis effectivement à rendre compte de l 'état
du verrouillage de défilement, ce qui tombe bien puisque c'était
effectivement le but, mais j'aimerais bien comprendre comment il se fai t
que j'achoppe sur les autres points de l'état du clavier.

Le fait de lancer un formulaire .Net, est-ce que ça affecte les API q ui
permettent d'interroger l'état du clavier ? Y a-t-il quelque chose à
faire pour que l'état soit rafraichi ?

J'ai travaillé avec ces constantes, j'imagine que le problème ne se
situe pas là :
const int VK_SCROLL = 0x91;
const int VK_CAPITAL = 0x14;
const int VK_NUMLOCK = 0x90;
const int VK_INSERT = 0x2D;
const int VK_ATTN = 0xF6;

Bon et puis tant que j'y suis les API :
[DllImport("user32.dll")]
private static extern int GetKeyboardState(byte pbKeyState);

[DllImport("user32.dll")]
private static extern Int16 GetKeyState(int nVirtKey);



Gloops
Le #20542151
Gloops a écrit, le 12/11/2009 17:14 :
Seul le verrouillage du pavé numérique est encore un peu rétif, a vec le
même code pourtant. Comme le verrouillage numérique fonctionne puis que
je tape bien des chiffres avec le pavé numérique, je me demande si ça ne
serait pas la constante VK_NUMLOCK qui serait fausse, j'ai
const int VK_NUMLOCK = 0x90;




En fait, je me rends compte que GetKeyState(VK_NUMLOCK) s'active en
pressant Fn F11, et se désactive en pressant Fn F10. Après avoir pres sé
Fn F11 on tape les chiffres, avec le pavé numérique qui se situe gros so
modo entre les lettres J et O (c'est un portable), et après avoir press é
Fn F10 on accède aux fonctions du pavé numérique déverrouillé, à savoir
les touches de déplacement de curseur.

Bon, il reste à faire mumuse avec les autres constantes VK pour savoir
laquelle va m'indiquer le deuxième état du pavé numérique, et lu i
affecter un code à l'affichage.

Et au passage, il faut que je fasse attention en jouant avec ça, parce
que Fn Espace change la résolution d'écran.

En début d'après-midi je ne me voyais pas si bien embarqué que ça .

Merci quand même à ceux qui ont pris le temps de lire le fil ...
Publicité
Suivre les réponses
Poster une réponse
Anonyme