GNT sans publicité, site mobile, fonctionnalitées exclusives...

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
Lire la réponse

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Hubert Canevet
Le #135498
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

.



Publicité
Suivre les réponses
Poster une réponse
Anonyme