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)?
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 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
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" <gloops@niark.fr> a écrit dans le message de
news:42ab6a07$0$11685$8fcfb975@news.wanadoo.fr...
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 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
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 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
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.
Merci, Jacques pour cette base de départ !
"Jacques93" <jacques.le-gocNO@PUBwouanadoo.fr> a écrit dans le message de
news:%23M38ENqbFHA.2936@tk2msftngp13.phx.gbl...
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
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.
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
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 !
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
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.
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.
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.
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.
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.
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.
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.
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.
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.