OVH Cloud OVH Cloud

Clavier

26 réponses
Avatar
Jean-Francois.Vassard
Bonjour,

Quelqu'un saurait-il comment il est possible de forcer le clavier en
majuscules ou en minuscules (comme si l'on appuyait manuellement sur la
touche Shift), à l'aide d'un programme Visual Basic (VB5 VB6)?

Merci d'avance,

JF

6 réponses

1 2 3
Avatar
Jean-Francois.Vassard
Je viens d'essayer et même QUE ÇA MARCHE !
Doué, le Gloops.

Petite question de quelqu'un (moi) qui programme en Basic, mais n'y connaît
rien aux API. (Pourtant, c'est magique.)
Où et comment avez-vous appris à les maîtriser ? Je postule !

Merci,

JFV


"Gloops" a écrit dans le message de
news:42ab6a07$0$11685$
Alors comme ça, j'ai aggravé mon cas, en remplaçant quelque chose de
faux par quelque chose de tout aussi faux.

Alors je me suis dit, bon, cette fois, on teste.

Avec chacune des deux configurations de clavier (retour en minuscules
avec la touche de verrouillage de majuscules, ou avec la touche Shift),
j'ai cliqué trois fois de suite sur un des deux boutons puis trois fois
de suite sur l'autre, et le témoin des majuscules était bien allumé
quand j'avais cliqué sur cmdMaj, et éteint quand j'avais cliqué sur
cmdMin. Il me semble bien que c'est ça qu'on vise ...

Je vais bien avoir réussi à dire un truc qui se tient, cette fois ?

Allez cette fois je balance toute la sauce, qu'il n'y ait pas
d'hésitation. C'est donc le code d'un formulaire qui comporte un bouton
cmdMaj et un bouton cmdMin.
____________________________________________________________________
Option Explicit

Private Declare Sub keybd_event Lib "user32" _
(ByVal bVk As Byte, _
ByVal bScan As Byte, _
ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)

Private Declare Function MapVirtualKey Lib "user32" _
Alias "MapVirtualKeyA" _
(ByVal wCode As Long, ByVal wMapType As Long) As Long

Private Const KEYEVENTF_KEYUP = &H2
Private Const KEYEVENTF_EXTENDEDKEY = &H1

Private Declare Function GetKeyboardState Lib "user32" (pbKeyState As
Byte) As Long

Private Type KeyboardBytes
kbByte(0 To 255) As Byte
End Type


Private Sub MajKeyb()
keybd_event vbKeyCapital, _
MapVirtualKey(KeyCodeConstants.vbKeyCapital, 0), _
KEYEVENTF_EXTENDEDKEY Or 0, 0

keybd_event vbKeyCapital, _
MapVirtualKey(KeyCodeConstants.vbKeyCapital, 0), _
KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
End Sub

Private Sub MinKeyb()
keybd_event KeyCodeConstants.vbKeyShift, _
MapVirtualKey(KeyCodeConstants.vbKeyShift, 0), _
KEYEVENTF_EXTENDEDKEY Or 0, 0

keybd_event KeyCodeConstants.vbKeyShift, _
MapVirtualKey(KeyCodeConstants.vbKeyShift, 0), _
KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
End Sub

Private Sub cmdMaj_Click()
Dim kbArray As KeyboardBytes
GetKeyboardState kbArray.kbByte(0)
If kbArray.kbByte(KeyCodeConstants.vbKeyCapital) = 0 Then
MajKeyb
End If
End Sub

Private Sub cmdMin_Click()
Dim kbArray As KeyboardBytes
GetKeyboardState kbArray.kbByte(0)
If kbArray.kbByte(KeyCodeConstants.vbKeyCapital) = 1 Then
MinKeyb
End If
DoEvents
GetKeyboardState kbArray.kbByte(0)
If kbArray.kbByte(KeyCodeConstants.vbKeyCapital) = 1 Then
MajKeyb
End If
End Sub



Avatar
Jean-Francois.Vassard
Merci, Jacques pour cette base de départ !

"Jacques93" a écrit dans le message de
news:%
Bonjour Jean-Francois.Vassard,

Et pour passer en minuscules :

Private Sub MinKeyb()
keybd_event KeyCodeConstants.vbKeyShift, _
MapVirtualKey(KeyCodeConstants.vbKeyShift, 0), _
KEYEVENTF_EXTENDEDKEY Or 0, 0

keybd_event KeyCodeConstants.vbKeyShift, _
MapVirtualKey(KeyCodeConstants.vbKeyShift, 0), _
KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
End Sub


--
Cordialement,

Jacques.


Avatar
Gloops
Oh ben moi j'avoue que j'ai commencé par pomper ce que refilaient les
autres sur newsgroups. Après j'ai cherché à comprendre.

Je crois que APIGuide c'est une bonne adresse, en plus ça peut éviter
pas mal de redondances dans les newsgroups (là-dessus je n'ai pas trop
assuré il y a une semaine ou deux).
http://www.mentalis.org/apilist
____________________________________________________
Jean-Francois.Vassard a écrit, le 12/06/2005 09:40 :
Je viens d'essayer et même QUE ÇA MARCHE !
Doué, le Gloops.

Petite question de quelqu'un (moi) qui programme en Basic, mais n'y connaît
rien aux API. (Pourtant, c'est magique.)
Où et comment avez-vous appris à les maîtriser ? Je postule !

Merci,

JFV


Avatar
Gloops
Pour mémoire je mentionne le lien vers le chargeur d'API fourni avec VB6
(c'est un lien valable avec l'installation par défaut, bien entendu) :
"C:Program FilesMicrosoft Visual
StudioCommonToolsWinapiAPILOAD.EXE" /T
C:PROGRA~1MIAF9D~1CommonToolsWinapiWIN32API.TXT

Le répertoire est le même dans les deux cas.
J'ai laissé le premier en nom long pour être sûr qu'il soit valable sur
toutes les machines, et le deuxième en nom court pour qu'il tienne sur
une ligne.

D'ailleurs en théorie il me semble qu'on devrait pouvoir se contenter de
donner le répertoire dans le champ "démarrer dans" du raccourci, et en
cible mettre juste
APILOAD /T WIN32API.TXT

Pour chercher "Visionneuse API" j'ai l'impression qu'Internet est une
meilleure source que MSDN fourni avec VB6.
De toute manière je dois dire que je l'utilise surtout pour les
constantes, car pour les déclarations de procédures je copie dans
APIGuide. J'y ai noté une erreur, mais entre l'onglet Paramètres et
l'onglet Exemples on finit par trouver quelque chose qui marche.
Avatar
Gloops
Une bonne adresse pour démarrer. En principe c'est conçu pour Access,
mais certaines pages sont utiles sous VB6 aussi.

http://www.mvps.org/accessfr/apis/index.htm

Et on peut aussi remonter dans l'arborescence, et voir sous la racine si
on trouve d'autres trucs intéressants, sur ce sujet ou un autre.
Avatar
Gloops
Pendant qu'on y est on peut difficilement ne pas mentionner que le gros
argument commercial de Microsoft pour "vendre" l'environnement .Net,
c'est qu'il ne nécessite pas d'appel aux API, tout étant intégré au langage.
1 2 3