2009-05-18 27 views
1

Je veux pouvoir intercepter (et effectuer un traitement arbitraire sur) des appuis automatiques sur Windows. J'aimerais savoir comment l'auto-répétition du clavier est implémentée pour que je sache quelles options j'ai. dire que je peux intercepter au:Comment l'auto-répétition du clavier est-elle implémentée sur un PC Windows?

    demande
  • ,
  • pilote de périphérique
  • et/ou
  • niveau matériel

?

Mise à jour: Il semble que la répétition automatique soit (faiblement?) Générée au niveau matériel, puis remplacée par les pilotes de périphérique (see here).

Répondre

2

Pour modifier ou le comportement du filtre, vous pouvez intercepter les clés à l'aide d'un crochet:

SetWindowsHookEx utilisant WH_KEYBOARD

Le hook procedure reçoit, entre autres, le nombre de répétitions (en raison de maintenir la touche)

Notez que le crochet de clavier bas niveau (WH_KEYBOARD_LL) ne reçoit pas le nombre de répétitions.

Si toutes vos fenêtres sont créées dans le même trhead, vous pouvez utiliser un hook spécifique au thread et éviter de déplacer la procédure de hook vers une DLL.


Je me souviens vaguement que le nombre de répétitions sont générés par le clavier lui-même et le crochet de LL envoie répété des événements keydown - je peux me tromper, cependant. Sous DOS, le taux de répétition de la clé et le temps qui a été défini dans le BIOS ou via un appel du BIOS ont renvoyé les valeurs par défaut lorsqu'un clavier DIN ou PS/2 a été débranché et rebranché. Je ne suis pas sûr pourquoi vous avez besoin de savoir exactement.

0

Je suggère que vous pouvez modifier votre question ... votre question réelle est « Comment faire pour supprimer la répétition automatique sous Windows dans $ {} yourLangauge » ...

Pour que ma réponse est, je Je n'en ai pas la moindre idée, je l'ai seulement fait en assembleur (MASM 80286) ... et même alors j'ai trouvé une solution sur un BBS (quelqu'un s'en souvient-il?) et l'a juste utilisé. De mémoire, l'interception doit être effectuée au niveau du pilote de périphérique.

La mise en œuvre de l'autorepeat (100 $ dit qu'il est assembleur) ne fera probablement pas la lumière sur la suppression ... cela et Microsoft joue ces cartes très près de son coffre.

Vive. Keith

EDIT: Je viens de penser ... les techniques peuvent maintenant différer entre les versions de Windows et la pléthore de divers dispositifs ... Oh goodie!

+0

Non, je veux vraiment savoir comment ça se passe. Le bit sur la suppression est pour l'information d'arrière-plan. Mon soupçon était que cela pourrait être au niveau du matériel (ce qui, s'il est vrai, me donne plus d'options pour l'interception). –

0

Ce type de contenu n'a pas de rapport avec la programmation. Allez dans "Options d'accessibilité" dans le panneau de configuration. Sélectionnez "Paramètres" sous le groupe "Touches de filtre", ici, vous pouvez désactiver les touches répétitives pour cet utilisateur sur cette machine.

J'espère que c'est ce que vous cherchez.

P.S. Ci-dessus les instructions données pour Windows XP.

+0

Je veux être en mesure de supprimer ce par programme, mais je suis heureux que je serai en mesure de travailler sur la façon de le faire une fois que je comprends comment/où l'auto-répétition est implémentée. –