Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Gérer l'état du clavier

1 réponse
Avatar
Hubert Canevet
Bonjour tout le monde,

Hier en cherchant quelque chose dans les archives, je suis=20
tomb=E9 sur un message o=F9 quelqu'un se plaignait qu'un=20
pilote au d=E9marrage de la machine lui faisait passer le=20
clavier en majuscules. Pas moyen de mettre la main sur la=20
doc du pilote, bien entendu.

=E7a m'a paru int=E9ressant comme exercice, j'ai =E9crit un=20
programme qui fasse passer le clavier en minuscules.

=E7a marche, seulement si ensuite l'utilisateur remodifie=20
l'=E9tat du clavier, par exemple en appuyant sur=20
Verrouillage Num=E9rique ou Insertion, le verrouillage des=20
majuscules est =E0 nouveau activ=E9, comme si l'=E9tat du=20
clavier avait =E9t=E9 sauvegard=E9 avant mon programme. C'est un=20
test que j'ai fait sous Windows 98 SE, et le programme est=20
compil=E9 avec VB6.

Attention, tant qu'on reste dans l'environnement de=20
d=E9veloppement le probl=E8me ne se pose pas, en revanche si=20
je s=E9lectionne une autre fen=EAtre avant de modifier l'=E9tat=20
du clavier, ou si je lance mon programme compil=E9, l=E0 =E7a=20
donne ce que je viens de d=E9crire.

A c=F4t=E9 de quoi suis-je pass=E9 ?


A tout hasard voici le code de mon programme, inspir=E9 de=20
allapi.net :

Private Declare Function GetKeyboardState Lib "user32"=20
(kbArray As KeyboardBytes) As Long
Private Declare Function SetKeyboardState Lib "user32"=20
(kbArray As KeyboardBytes) As Long
Public Const VK_CAPITAL =3D &H14
Dim kbArray As KeyboardBytes, CapsLock As Boolean, kbOld=20
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) =3D 0
'set the keyboard state
SetKeyboardState kbArray
End=20

1 réponse

Avatar
Hubert Canevet
Bon, ben excusez-moi, je me suis encore bagarré avec
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.

-----Message d'origine-----
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

.