Désactiver la touche NumLock

Désactiver la touche NumLock - C++ - Programmation

Marsh Posté le 28-07-2004 à 11:27:28    

Salut à tous.
 
Certaines personnes au boulot ont un pb : elles doivent saisir rapidement des tonnes de chiffres dans des formulaires et utilisent donc a fond le pavé numérique. Or, il arrive qu'elles appuient par mégarde sur la touche NumLock => passage en mode touche de direction. La fleche vers le haut rapelle la dernière valeur entrée, la flèche vers le bas propose une nouvelle valeur de manière à peu prés intelligente, etc etc
Ce qui fait qu'un appuie non volontaire sur Numlock a des conséquences sur les données saisies. Comme ca va trés vite, on se retrouve au final avec de la merde dans la bdd qu'il y a derrière ...
 
Je veux donc vérrouiller le clavier en mode NUMLOCK.
 
Je ne peux pas modifier le programme de saisie, j'essaie donc de faire un autre soft qui désactive le changement de mode NumLock/pas NumLock, de manière globale dans Windows.
J'ai essayé de poser un "hook" de bas niveau sur le clavier afin d'intercepter l'appuie sur la touche et ne rien renvoyer. Ca fonctionne parfaitement avec toutes les touches sauf .... avec NumLock.
(fonction SendInput, SetLowLevelKeyboardHook de l'api Win32)
 
Quand NumLock est intercepté, la diode ne change pas d'état (ca c'est ok) mais l'etat réèl du pavé numérique a changé : on continue de le verouiller/déverrouiller...
 
Comment peux-ton faire pour reellement y arriver ? Y a t-il plus simple que les hooks bas niveau ?
 
OS : Win2k
Langage : MFC, Api Win32

Reply

Marsh Posté le 28-07-2004 à 11:27:28   

Reply

Marsh Posté le 28-07-2004 à 11:47:23    

Solution + facile : tu fais sauter la touche de ton clavier :o (ou des claviers des utilisateurs)
Et puis comment on peut appuyer sur la touche numlock par mégarde? A ce moment la on inverse pas un peu des chiffres non?  :heink:

Reply

Marsh Posté le 28-07-2004 à 12:17:17    

hop le fou a écrit :

Solution + facile : tu fais sauter la touche de ton clavier :o (ou des claviers des utilisateurs)
Et puis comment on peut appuyer sur la touche numlock par mégarde? A ce moment la on inverse pas un peu des chiffres non?  :heink:


+1, surtout pour la seconde phrase....
J'ai peur que num lock soit géré à un encore plus bas niveau que les autres touches, par le contrôleur clavier directement. D'où le comportement que tu observes.


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 28-07-2004 à 12:24:53    

tu interceptes les évènements des touches de déplacement (NumLock désactivé) et tu renvoies les chiffres correspondants à la place :o

Reply

Marsh Posté le 28-07-2004 à 13:05:31    

Masklinn a écrit :

tu interceptes les évènements des touches de déplacement (NumLock désactivé) et tu renvoies les chiffres correspondants à la place :o


 
bonne idée ... sauf que ces touches doivent servir aussi et rester accessible. Je ne sais pas faire la différence entre la "fleche gauche" du pavé de direction et celle du pavé numérique.
 

Code :
  1. Solution + facile : tu fais sauter la touche de ton clavier :o (ou des claviers des utilisateurs)


 
:) je me vois dejà dans le bureau de ces secrétaires avec mon tournevis ...
 

Code :
  1. Et puis comment on peut appuyer sur la touche numlock par mégarde?


 
Trés facile : la touche est juste à coté du 7 du pavé. Quand ca se produit, les gens s'en rendent compte généralement car l'appuie sur une des touches de direction a un effet particulier : changer la valeur contenue dans le champ. Et ca écrase celle qu'on était en train de taper => utilisateur pas content.

Reply

Marsh Posté le 28-07-2004 à 13:07:05    

demande un update des utilisateurs pour une version plus maline et regardant leurs écrans quand ils tapent alors, c'est la seule solution viable

Reply

Marsh Posté le 28-07-2004 à 13:11:35    

Ha oui, j'ai essayé aussi de récupérer l'etat de verouillage du pavé numérique et émuler l'appuie supplémentaire sur numlock lorsqu'on appuie manuellement dessus (2 numlock au lieu d'un).
 
Visiblement, ca chie : j'obtient un booleen m'indiquant visiblement l'état de la diode du numlock du clavier. Or cette diode ne correspond pas reellement au verrouillage du pavé ... => ca tombe à l'eau.
 

Code :
  1. J'ai peur que num lock soit géré à un encore plus bas niveau que les autres touches, par le contrôleur clavier directement. D'où le comportement que tu observes.


 
Et moi j'ai peur que tu ais raison.... :(


Message édité par oliv5 le 28-07-2004 à 13:12:30
Reply

Marsh Posté le 28-07-2004 à 13:13:26    

ou alors tu remplaces tous tes claviers par des claviers avec une touche num lock plus éloignée du numpad :o

Reply

Marsh Posté le 28-07-2004 à 13:38:39    

oliv5 a écrit :

Et moi j'ai peur que tu ais raison.... :(

Si tu es capable d'intercepter le moment ou quelqu'un appuie sur numlock, il suffit de simuler le second appui sur la touche un peu plus tard, indépendamment du booléen qui t'indique l'état de la led du clavier. Il faut cependant que le clavier soit dans le bon mode des le début...

Reply

Marsh Posté le 28-07-2004 à 13:39:59    

Ou alors, puisque tu es aussi capable d'intercepter toutes les autres touches, pourquoi ne pas intercepter toutes les touches du pavé numérique et simuler l'appui sur les touches numériques en fonction?  
Par exemple si j'appuie sur la touche origine du pavé numérique ca simule l'appui sur la touche 7...

Reply

Marsh Posté le 28-07-2004 à 13:39:59   

Reply

Marsh Posté le 28-07-2004 à 16:24:15    

Ace17 a écrit :

Si tu es capable d'intercepter le moment ou quelqu'un appuie sur numlock, il suffit de simuler le second appui sur la touche un peu plus tard, indépendamment du booléen qui t'indique l'état de la led du clavier. Il faut cependant que le clavier soit dans le bon mode des le début...


 
Pas con, je vais essayer ca.  :jap:  Dire que ca m'est pas venu a l'esprit ...  :sleep:  
 

Citation :

Ou alors, puisque tu es aussi capable d'intercepter toutes les autres touches, pourquoi ne pas intercepter toutes les touches du pavé numérique et simuler l'appui sur les touches numériques en fonction?  


 
En fait, on récupère le numéro de la touche virtuelle qui vient d'etre préssée : le 7 du pavé numérique génèrera donc VK_NUMPAD7 si le pavé est verouillé sur On, sinon tu obtiendras VK_HOME.
Dans le meme ordre d'esprit, les touches 2,4,6,8 (fleches) renvoient soit VK_NUMPADX (X=numero touche) soit VK_LEFT,VK_RIGH,VK_UP,VK_DOWN (dans le désordre  :D ), selon l'état du verouillage du pavé numérique.
 
Tu vois ? (pas simple de me comprendre en me relisant :))
 
Par ex, je peux intercepter VK_LEFT : je ne sais pas si c'est le 4 du pavé numérique ou la touche de direction gauche. Comme la detection de l'etat du pavé numérique chie, bein heuuu... je ne sais pas quoi faire ...

Reply

Marsh Posté le 28-07-2004 à 16:28:05    

Masklinn a écrit :

demande un update des utilisateurs pour une version plus maline et regardant leurs écrans quand ils tapent alors, c'est la seule solution viable


 
Je voudrais bien, mais bon, ca coute cher cette nouvelle version.  :lol:  
 
Remarques, je fais ca pour rendre service, car le principe du programme m'interesse. Si j'y arrive pas, bein, ils continueront comme avant. Ya jamais eu mort d'homme à cause de ce pb, juste de petits/gros chiffres erronés  ;)  
 
(mais étant stagiaire, bientot à la recherche d'un boulot, si je peux rendre service et me faire bien voir  par la meme occasion ...  :sol: )

Reply

Marsh Posté le 28-07-2004 à 16:33:01    

à chaque pression de touche, si numlock = off tu mets numlock = on, je ne vois pas trop le problème :??: (c'est super simple à faire en Delphi en tout cas ; j'avais fait un soft qui compte le nombre de fois que chaque touche est appuyée et le numlock est intercepté comme toutes les autres, sauf la touche PrintScreen, je ne sais pas pourquoi)
 
j'essaierai ce soir de voir si ça marche à partir du code que j'ai déjà


Message édité par antp le 28-07-2004 à 16:35:07
Reply

Marsh Posté le 28-07-2004 à 16:40:38    

(rummm .... :))
Vilain antp qui n'a pas lu le post :)
 
Je n'arrive pas obtenir l'information numlock=on/off. Car ca marche la première fois, mais aprés avoir simulé l'appuis sur la touche (numlock) la première fois, ca ne marche plus correctement.
J'utilise les fonctions GetKeyState et GetAsyncKeyState, les 2 me posent le meme pb.
 
Sinon, je suis d'accord, c'est trés con à la base, c'est pour ca que j'essaie de le faire, pour rendre service rapido. (sauf que c'est moins rapido que ce que je croyais)

Reply

Marsh Posté le 28-07-2004 à 16:48:46    

oliv5 a écrit :


Vilain antp qui n'a pas lu le post :)


 
bah si, j'ai lu, mais je ne vois pas trop le problème : j'avais fait des essais avec le capslock en fait et ça marchait bien ; donc j'imagine que numlock c'est pareil :??:

Reply

Marsh Posté le 28-07-2004 à 17:04:06    

antp a écrit :

bah si, j'ai lu, mais je ne vois pas trop le problème : j'avais fait des essais avec le capslock en fait et ça marchait bien ; donc j'imagine que numlock c'est pareil :??:


 
Bah dsl alors  ;)  
 
Bein, ayant aussi deja fait un soft qui capturait le clavier, j'ai moi aussi cru que ce serait facile.
Bon, je reessairais ce soir.

Reply

Marsh Posté le 28-07-2004 à 18:07:31    

http://www.bytegems.com/ihatethiskeydeluxe.shtml
http://www.phord.com/keyblock.html
 
y a des petits softs pas chers qui font ça, c'est peut-être la solution la plus simple :D

Reply

Marsh Posté le 28-07-2004 à 19:57:21    

Cool !!!
 
Merci antp!
 
EDIT : doh !! ya pas de sources ...
Le pb, c'est que je vais pas imposer l'achat d'un de ces progs, meme si ca coute rien.


Message édité par oliv5 le 28-07-2004 à 20:02:52
Reply

Marsh Posté le 29-07-2004 à 13:29:57    

ouais bon ben j'ai trouvé la source de  mes pbs.
 
En remplacant GetAsyncKeyState par GetKeyState (ces 2 fonctions renvoient l'état d'une touche, mais ne le font pas au meme moment), j'arrive a detecter le vrai état de Numlock => ca me permet de simuler un appuis suplémentaire sur cette meme touche si le pavé numérique était verrouilé.
 
 


Message édité par oliv5 le 29-07-2004 à 13:30:34
Reply

Marsh Posté le 29-07-2004 à 13:40:05    

oliv5 a écrit :


Le pb, c'est que je vais pas imposer l'achat d'un de ces progs, meme si ca coute rien.


 
J'ai pas cherché longtemps ; il y avait peut-être des softs gratuits aussi


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed