OVH Cloud OVH Cloud

Filtre sur le clavier

2 réponses
Avatar
AG
Bonjour,

J'essaye de faire marche un filtre sur le clavier :

SetWindowsHookEx(WH_JOURNALRECORD,&JournalRecordProc,etc...

dans ma fonction de "callback" JournalRecordProc(), je traite les
messages WM_KEYDOWN

Pour afficher le nom de la touche frappée au clavier, j'utilse
GetKeyNameText() avec les bons bits 16-23 et 24 comme il faut.

Tout ça fonctionne correctement. Les noms des touches frappées sont
affichées correctement (c'est à dire en majuscule car la fonction
GetKeyNameText() ne prend en compte que le scan code).

Cependant, j'ai des problèmes sur certaines touches. Notamment les
flêches vers le haut et vers le bas. la touche 'del' 'fin' 'Inser'
'debut de ligne' etc... en fait, j'ai l'impression que c'est toutes les
touches qui se trouvent entre le clavier standard et le clavier
numérique. Bref, je ne vois pas trop sur quel paramètre agir pour
corriger ce problème.

J'ai bien chargé le bon keyboard pourtant (j'ai vérifié c'est du
français standard)...

le tab, caps lock, espace, shift, F1..F12 fonctionnent toutes. AltGr
aussi. Alt ne fonctionne pas mais je crois que c'est à cause du type du
message (il faut traiter les messages WM_SYSKEYDOWN visiblement).


Une petite aide serait des plus bienvenues.

Merci.

Alexandre.

2 réponses

Avatar
Christian ASTOR
AG a écrit:

Tout ça fonctionne correctement. Les noms des touches frappées sont
affichées correctement (c'est à dire en majuscule car la fonction
GetKeyNameText() ne prend en compte que le scan code).



Non, GetKeyNameText() affiche bien le nom complet (je ne vois pas le
rapport avec les majuscules...)
("Espace", "Entrée", "Insère", "Suppr" ...)

Cependant, j'ai des problèmes sur certaines touches. Notamment les
flêches vers le haut et vers le bas. la touche 'del' 'fin' 'Inser'
'debut de ligne' etc... en fait, j'ai l'impression que c'est toutes les
touches qui se trouvent entre le clavier standard et le clavier
numérique. Bref, je ne vois pas trop sur quel paramètre agir pour
corriger ce problème.



Parce que ce sont des extended keys.
Il faut tester le HIBYTE de paramH de la struct EVENTMSG.
Avatar
AG
Christian ASTOR wrote:
AG a écrit:

Tout ça fonctionne correctement. Les noms des touches frappées sont
affichées correctement (c'est à dire en majuscule car la fonction
GetKeyNameText() ne prend en compte que le scan code).




Non, GetKeyNameText() affiche bien le nom complet (je ne vois pas le
rapport avec les majuscules...)
("Espace", "Entrée", "Insère", "Suppr" ...)


Ce que je voulais dire c'est que 'a' et 'A' ont le même scan code. Ce
qui les différencie, c'est le fait qu'on ait utilisé la touche SHIFT en
plus pour 'A'. Et cette différence, je ne pense pas que GetKeyNameText()
le fasse tout seul. En me relisant je me rends compte que je me suis mal
exprimé.


Cependant, j'ai des problèmes sur certaines touches. Notamment les
flêches vers le haut et vers le bas. la touche 'del' 'fin' 'Inser'
'debut de ligne' etc... en fait, j'ai l'impression que c'est toutes
les touches qui se trouvent entre le clavier standard et le clavier
numérique. Bref, je ne vois pas trop sur quel paramètre agir pour
corriger ce problème.




Parce que ce sont des extended keys.
Il faut tester le HIBYTE de paramH de la struct EVENTMSG.



pfff, je vais me coucher. A force de lire et relire cette doc je mélange
tout. Je zappais systématiquement les lignes qui parlais du repeat count
parce que je ne m'y intéressait pas. Hors paramH contient le repeat
count, ET le flag des extended keys, sur le dernier bit. Merci bien...

En fait, j'ai finalement changé mon filter WH_JOURNALRECORD pour un
filtre WH_KEYBOARD qui lui fonctionne parfaitement. (Je me suis
largement inspiré de tous tes posts à ce sujet d'ailleurs).