Gérer l'état du clavier
Le
Hubert Canevet
Bonjour tout le monde,
Hier en cherchant quelque chose dans les archives, je suis
tombé sur un message où quelqu'un se plaignait qu'un
pilote au démarrage de la machine lui faisait passer le
clavier en majuscules. Pas moyen de mettre la main sur la
doc du pilote, bien entendu.
ça m'a paru intéressant comme exercice, j'ai écrit un
programme qui fasse passer le clavier en minuscules.
ça marche, seulement si ensuite l'utilisateur remodifie
l'état du clavier, par exemple en appuyant sur
Verrouillage Numérique ou Insertion, le verrouillage des
majuscules est à nouveau activé, comme si l'état du
clavier avait été sauvegardé avant mon programme. C'est un
test que j'ai fait sous Windows 98 SE, et le programme est
compilé avec VB6.
Attention, tant qu'on reste dans l'environnement de
développement le problème ne se pose pas, en revanche si
je sélectionne une autre fenêtre avant de modifier l'état
du clavier, ou si je lance mon programme compilé, là ça
donne ce que je viens de décrire.
A côté de quoi suis-je passé ?
A tout hasard voici le code de mon programme, inspiré de
allapi.net :
Private Declare Function GetKeyboardState Lib "user32"
(kbArray As KeyboardBytes) As Long
Private Declare Function SetKeyboardState Lib "user32"
(kbArray As KeyboardBytes) As Long
Public Const VK_CAPITAL = &H14
Dim kbArray As KeyboardBytes, CapsLock As Boolean, kbOld
As KeyboardBytes
Private Type KeyboardBytes
kbByte(0 To 255) As Byte
End Type
Public Sub Main()
TurnOff VK_CAPITAL
End Sub
Private Sub TurnOff(vkKey As Long)
'Get the keyboard state
GetKeyboardState kbArray
'change a key
kbArray.kbByte(vkKey) = 0
'set the keyboard state
SetKeyboardState kbArray
End
Hier en cherchant quelque chose dans les archives, je suis
tombé sur un message où quelqu'un se plaignait qu'un
pilote au démarrage de la machine lui faisait passer le
clavier en majuscules. Pas moyen de mettre la main sur la
doc du pilote, bien entendu.
ça m'a paru intéressant comme exercice, j'ai écrit un
programme qui fasse passer le clavier en minuscules.
ça marche, seulement si ensuite l'utilisateur remodifie
l'état du clavier, par exemple en appuyant sur
Verrouillage Numérique ou Insertion, le verrouillage des
majuscules est à nouveau activé, comme si l'état du
clavier avait été sauvegardé avant mon programme. C'est un
test que j'ai fait sous Windows 98 SE, et le programme est
compilé avec VB6.
Attention, tant qu'on reste dans l'environnement de
développement le problème ne se pose pas, en revanche si
je sélectionne une autre fenêtre avant de modifier l'état
du clavier, ou si je lance mon programme compilé, là ça
donne ce que je viens de décrire.
A côté de quoi suis-je passé ?
A tout hasard voici le code de mon programme, inspiré de
allapi.net :
Private Declare Function GetKeyboardState Lib "user32"
(kbArray As KeyboardBytes) As Long
Private Declare Function SetKeyboardState Lib "user32"
(kbArray As KeyboardBytes) As Long
Public Const VK_CAPITAL = &H14
Dim kbArray As KeyboardBytes, CapsLock As Boolean, kbOld
As KeyboardBytes
Private Type KeyboardBytes
kbByte(0 To 255) As Byte
End Type
Public Sub Main()
TurnOff VK_CAPITAL
End Sub
Private Sub TurnOff(vkKey As Long)
'Get the keyboard state
GetKeyboardState kbArray
'change a key
kbArray.kbByte(vkKey) = 0
'set the keyboard state
SetKeyboardState kbArray
End

Poser une question


l'interface multi-groupes. ça doit être après avoir
demandé le raffraîchissement de l'écran, je me retrouve
sous un autre groupe que celui que je croyais. Si je fais
bien attention à ce moment-là je le vois, sinon, hop, le
message part dans le mauvais groupe.
ça fait trois fois que je fais le coup, ça commence à
faire beaucoup, je vais voir si je réussis à me faire une
interface avec une zone de texte au lieu d'un arbre
hiérarchique, histoire de voir si ça s'avère plus stable.
Excusez pour le dérangement, ceci n'a rien à voir avec
Word.