SendKeys "L", True ' Appelle Load
SendKeys "htm.tdy", True
' Met le focus sur Ouvre :
keybd_event VK_%, 0, KEYEVENTF_KEYUP, 0 ' release %
keybd_event VK_O, 0, KEYEVENTF_KEYUP, 0 ' release O
' Met le focus sur Add
keybd_event VK_%, 0, KEYEVENTF_KEYUP, 0 ' release %
keybd_event VK_A, 0, KEYEVENTF_KEYUP, 0 ' release A
SendKeys "test.htm", True
keybd_event VK_%, 0, KEYEVENTF_KEYUP, 0 ' release %
keybd_event VK_O, 0, KEYEVENTF_KEYUP, 0 ' release O
la feuille "Ouvrir" de Windows s'affiche avec "htm.tdytest.htm" (au lieu de
htm.tdy) dans sa TextBox.
Et si l'on clique son bouton 'Ouvrir', windows dit que ce fichier n'existe
pas !
Je suis donc condamné à n'écrire que :
SendKeys "L", True ' Appelle Load
SendKeys "htm.tdy", True
' Met le focus sur Ouvre :
keybd_event VK_%, 0, KEYEVENTF_KEYUP, 0 ' release %
keybd_event VK_O, 0, KEYEVENTF_KEYUP, 0 ' release O
ce qui affiche la feuille "Ouvrir" avec le fichier 'htm.tdy' dans sa
TextBox. Mais mon utilisateur devra cliquer sur son bouton 'Ouvre', puis sur
d'autres boutons de HTMLTrim ... pour arriver à tester 'test.htm' : C'est la
m... !
En conclusion VB est incapable de traiter des SendKeys correctement.
Et donc il lui est impossible de diriger une appli extérieure.
:-( :-(
je n'ai pas suivi le débat alors cette solution t'as peut-être déjà été proposé, mais as-tu essayé d'appeler DoEvents entre chaque envoi de touche ?
-- Cordialement Yanick Lefebvre - MVP pour Visual Basic Le français se refait une beauté, parlons en : http://www.orthographe-recommandee.info/
ng
Salut,
C'est normal que le comportement soit incoorect tout ce que tu fais c'est des releases (des key up) il faut presser la touche avant de pouvoir la relacher !!!
Exemple :
Call keybd_event(VK_H, 0, 0, 0) '//On presse H Call keybd_event(VK_H, 0, KEYEVENTF_KEYUP, 0) '//On relache H
De plus cela m'étonnerai qu'il existe une constante nommée VK_% ! Il faut définir les constantes à utiliser avant.
Exemple : Const VK_A = 65 '//cad asc("A")
Ou utliser directement Asc() :
Call keybd_event(Asc("A"), 0, 0, 0) '//On presse A Call keybd_event(Asc("A"), 0, KEYEVENTF_KEYUP, 0) '//On relache A
On pourrait ainsi ecrire une fonction :
Option Explicit
Private Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const KEYEVENTF_KEYUP = &H2
Public Sub SendKeysAPI(strKeys As String) Dim i As Integer, lChar As Long For i = 1 To Len(strKeys) lChar = Asc(Mid$(strKeys, i, 1)) Call keybd_event(lChar, 0, 0, 0) Call keybd_event(lChar, 0, KEYEVENTF_KEYUP, 0) Next End Sub
Private Sub Text1_Click() Call SendKeysAPI("SALUT") End Sub
(c'est juste un exemple, ce n'est pas aussi complet que SendKeys())
-- Nicolas G. FAQ VB : http://faq.vb.free.fr API Guide : http://www.allapi.net Google Groups : http://groups.google.fr/ MZ-Tools : http://www.mztools.com/
Yves Boyer wrote:
<Essaye l'API keyb_event :>
Merci, mais ça ne donne rien de bon. En fait il est impossible d'enchaîner des SendKeys (ou des keybd_event) car VB mélange tout. Si j'écris :
SendKeys "L", True ' Appelle Load SendKeys "htm.tdy", True ' Met le focus sur Ouvre : keybd_event VK_%, 0, KEYEVENTF_KEYUP, 0 ' release % keybd_event VK_O, 0, KEYEVENTF_KEYUP, 0 ' release O ' Met le focus sur Add keybd_event VK_%, 0, KEYEVENTF_KEYUP, 0 ' release % keybd_event VK_A, 0, KEYEVENTF_KEYUP, 0 ' release A SendKeys "test.htm", True keybd_event VK_%, 0, KEYEVENTF_KEYUP, 0 ' release % keybd_event VK_O, 0, KEYEVENTF_KEYUP, 0 ' release O
la feuille "Ouvrir" de Windows s'affiche avec "htm.tdytest.htm" (au lieu de htm.tdy) dans sa TextBox. Et si l'on clique son bouton 'Ouvrir', windows dit que ce fichier n'existe pas !
Je suis donc condamné à n'écrire que : SendKeys "L", True ' Appelle Load SendKeys "htm.tdy", True ' Met le focus sur Ouvre : keybd_event VK_%, 0, KEYEVENTF_KEYUP, 0 ' release % keybd_event VK_O, 0, KEYEVENTF_KEYUP, 0 ' release O ce qui affiche la feuille "Ouvrir" avec le fichier 'htm.tdy' dans sa TextBox. Mais mon utilisateur devra cliquer sur son bouton 'Ouvre', puis sur d'autres boutons de HTMLTrim ... pour arriver à tester 'test.htm' : C'est la m... !
En conclusion VB est incapable de traiter des SendKeys correctement. Et donc il lui est impossible de diriger une appli extérieure. :-( :-(
Yves Boyer
Salut,
C'est normal que le comportement soit incoorect tout ce que tu fais c'est
des releases (des key up) il faut presser la touche avant de pouvoir la
relacher !!!
Exemple :
Call keybd_event(VK_H, 0, 0, 0) '//On presse H
Call keybd_event(VK_H, 0, KEYEVENTF_KEYUP, 0) '//On relache H
De plus cela m'étonnerai qu'il existe une constante nommée VK_% ! Il faut
définir les constantes à utiliser avant.
Exemple :
Const VK_A = 65 '//cad asc("A")
Ou utliser directement Asc() :
Call keybd_event(Asc("A"), 0, 0, 0) '//On presse A
Call keybd_event(Asc("A"), 0, KEYEVENTF_KEYUP, 0) '//On relache A
On pourrait ainsi ecrire une fonction :
Option Explicit
Private Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal
bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const KEYEVENTF_KEYUP = &H2
Public Sub SendKeysAPI(strKeys As String)
Dim i As Integer, lChar As Long
For i = 1 To Len(strKeys)
lChar = Asc(Mid$(strKeys, i, 1))
Call keybd_event(lChar, 0, 0, 0)
Call keybd_event(lChar, 0, KEYEVENTF_KEYUP, 0)
Next
End Sub
Private Sub Text1_Click()
Call SendKeysAPI("SALUT")
End Sub
(c'est juste un exemple, ce n'est pas aussi complet que SendKeys())
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
Yves Boyer wrote:
<Essaye l'API keyb_event :>
Merci, mais ça ne donne rien de bon.
En fait il est impossible d'enchaîner des SendKeys (ou des
keybd_event) car VB mélange tout. Si j'écris :
SendKeys "L", True ' Appelle Load
SendKeys "htm.tdy", True
' Met le focus sur Ouvre :
keybd_event VK_%, 0, KEYEVENTF_KEYUP, 0 ' release %
keybd_event VK_O, 0, KEYEVENTF_KEYUP, 0 ' release O
' Met le focus sur Add
keybd_event VK_%, 0, KEYEVENTF_KEYUP, 0 ' release %
keybd_event VK_A, 0, KEYEVENTF_KEYUP, 0 ' release A
SendKeys "test.htm", True
keybd_event VK_%, 0, KEYEVENTF_KEYUP, 0 ' release %
keybd_event VK_O, 0, KEYEVENTF_KEYUP, 0 ' release O
la feuille "Ouvrir" de Windows s'affiche avec "htm.tdytest.htm" (au
lieu de htm.tdy) dans sa TextBox.
Et si l'on clique son bouton 'Ouvrir', windows dit que ce fichier
n'existe pas !
Je suis donc condamné à n'écrire que :
SendKeys "L", True ' Appelle Load
SendKeys "htm.tdy", True
' Met le focus sur Ouvre :
keybd_event VK_%, 0, KEYEVENTF_KEYUP, 0 ' release %
keybd_event VK_O, 0, KEYEVENTF_KEYUP, 0 ' release O
ce qui affiche la feuille "Ouvrir" avec le fichier 'htm.tdy' dans sa
TextBox. Mais mon utilisateur devra cliquer sur son bouton 'Ouvre',
puis sur d'autres boutons de HTMLTrim ... pour arriver à tester
'test.htm' : C'est la m... !
En conclusion VB est incapable de traiter des SendKeys correctement.
Et donc il lui est impossible de diriger une appli extérieure.
:-( :-(
C'est normal que le comportement soit incoorect tout ce que tu fais c'est des releases (des key up) il faut presser la touche avant de pouvoir la relacher !!!
Exemple :
Call keybd_event(VK_H, 0, 0, 0) '//On presse H Call keybd_event(VK_H, 0, KEYEVENTF_KEYUP, 0) '//On relache H
De plus cela m'étonnerai qu'il existe une constante nommée VK_% ! Il faut définir les constantes à utiliser avant.
Exemple : Const VK_A = 65 '//cad asc("A")
Ou utliser directement Asc() :
Call keybd_event(Asc("A"), 0, 0, 0) '//On presse A Call keybd_event(Asc("A"), 0, KEYEVENTF_KEYUP, 0) '//On relache A
On pourrait ainsi ecrire une fonction :
Option Explicit
Private Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const KEYEVENTF_KEYUP = &H2
Public Sub SendKeysAPI(strKeys As String) Dim i As Integer, lChar As Long For i = 1 To Len(strKeys) lChar = Asc(Mid$(strKeys, i, 1)) Call keybd_event(lChar, 0, 0, 0) Call keybd_event(lChar, 0, KEYEVENTF_KEYUP, 0) Next End Sub
Private Sub Text1_Click() Call SendKeysAPI("SALUT") End Sub
(c'est juste un exemple, ce n'est pas aussi complet que SendKeys())
-- Nicolas G. FAQ VB : http://faq.vb.free.fr API Guide : http://www.allapi.net Google Groups : http://groups.google.fr/ MZ-Tools : http://www.mztools.com/
Yves Boyer wrote:
<Essaye l'API keyb_event :>
Merci, mais ça ne donne rien de bon. En fait il est impossible d'enchaîner des SendKeys (ou des keybd_event) car VB mélange tout. Si j'écris :
SendKeys "L", True ' Appelle Load SendKeys "htm.tdy", True ' Met le focus sur Ouvre : keybd_event VK_%, 0, KEYEVENTF_KEYUP, 0 ' release % keybd_event VK_O, 0, KEYEVENTF_KEYUP, 0 ' release O ' Met le focus sur Add keybd_event VK_%, 0, KEYEVENTF_KEYUP, 0 ' release % keybd_event VK_A, 0, KEYEVENTF_KEYUP, 0 ' release A SendKeys "test.htm", True keybd_event VK_%, 0, KEYEVENTF_KEYUP, 0 ' release % keybd_event VK_O, 0, KEYEVENTF_KEYUP, 0 ' release O
la feuille "Ouvrir" de Windows s'affiche avec "htm.tdytest.htm" (au lieu de htm.tdy) dans sa TextBox. Et si l'on clique son bouton 'Ouvrir', windows dit que ce fichier n'existe pas !
Je suis donc condamné à n'écrire que : SendKeys "L", True ' Appelle Load SendKeys "htm.tdy", True ' Met le focus sur Ouvre : keybd_event VK_%, 0, KEYEVENTF_KEYUP, 0 ' release % keybd_event VK_O, 0, KEYEVENTF_KEYUP, 0 ' release O ce qui affiche la feuille "Ouvrir" avec le fichier 'htm.tdy' dans sa TextBox. Mais mon utilisateur devra cliquer sur son bouton 'Ouvre', puis sur d'autres boutons de HTMLTrim ... pour arriver à tester 'test.htm' : C'est la m... !
En conclusion VB est incapable de traiter des SendKeys correctement. Et donc il lui est impossible de diriger une appli extérieure. :-( :-(
Yves Boyer
François Picalausa
Hello,
Ou utliser directement Asc() :
Les codes de touches ne correspondent pas forcément! Il existe d'ailleurs la fonction VkKeyScan(Ex) pour traduire un caractère en la touche correspondante, il ne faut pas supposer que le code de touche est toujours égal à Asc(xyz) (pour info : ToUnicode est la fonction qui traduit un virtual key code en caractère)
-- François Picalausa (MVP VB) http://faq.vb.free.fr --- http://msdn.microsoft.com
"ng" a écrit dans le message de news:
Hello,
Ou utliser directement Asc() :
Les codes de touches ne correspondent pas forcément!
Il existe d'ailleurs la fonction VkKeyScan(Ex) pour traduire un caractère en
la touche correspondante, il ne faut pas supposer que le code de touche est
toujours égal à Asc(xyz)
(pour info : ToUnicode est la fonction qui traduit un virtual key code en
caractère)
--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
"ng" <ng@ngsoft-fr.com> a écrit dans le message de
news:O7IItJ4jEHA.2680@TK2MSFTNGP15.phx.gbl
Les codes de touches ne correspondent pas forcément! Il existe d'ailleurs la fonction VkKeyScan(Ex) pour traduire un caractère en la touche correspondante, il ne faut pas supposer que le code de touche est toujours égal à Asc(xyz) (pour info : ToUnicode est la fonction qui traduit un virtual key code en caractère)
-- François Picalausa (MVP VB) http://faq.vb.free.fr --- http://msdn.microsoft.com
"ng" a écrit dans le message de news:
ng
Salut,
Je sais, d'où ma note "(c'est juste un exemple, ce n'est pas aussi complet que SendKeys())" et l'utilisation de majuscule uniquement, je ne me souvenais plus du nom de VkKeyScan() & co.
-- Nicolas G. FAQ VB : http://faq.vb.free.fr API Guide : http://www.allapi.net Google Groups : http://groups.google.fr/ MZ-Tools : http://www.mztools.com/
François Picalausa wrote:
Hello,
Ou utliser directement Asc() :
Les codes de touches ne correspondent pas forcément! Il existe d'ailleurs la fonction VkKeyScan(Ex) pour traduire un caractère en la touche correspondante, il ne faut pas supposer que le code de touche est toujours égal à Asc(xyz) (pour info : ToUnicode est la fonction qui traduit un virtual key code en caractère)
Salut,
Je sais, d'où ma note "(c'est juste un exemple, ce n'est pas aussi complet
que SendKeys())" et l'utilisation de majuscule uniquement, je ne me
souvenais plus du nom de VkKeyScan() & co.
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
François Picalausa wrote:
Hello,
Ou utliser directement Asc() :
Les codes de touches ne correspondent pas forcément!
Il existe d'ailleurs la fonction VkKeyScan(Ex) pour traduire un
caractère en la touche correspondante, il ne faut pas supposer que le
code de touche est toujours égal à Asc(xyz)
(pour info : ToUnicode est la fonction qui traduit un virtual key
code en caractère)
Je sais, d'où ma note "(c'est juste un exemple, ce n'est pas aussi complet que SendKeys())" et l'utilisation de majuscule uniquement, je ne me souvenais plus du nom de VkKeyScan() & co.
-- Nicolas G. FAQ VB : http://faq.vb.free.fr API Guide : http://www.allapi.net Google Groups : http://groups.google.fr/ MZ-Tools : http://www.mztools.com/
François Picalausa wrote:
Hello,
Ou utliser directement Asc() :
Les codes de touches ne correspondent pas forcément! Il existe d'ailleurs la fonction VkKeyScan(Ex) pour traduire un caractère en la touche correspondante, il ne faut pas supposer que le code de touche est toujours égal à Asc(xyz) (pour info : ToUnicode est la fonction qui traduit un virtual key code en caractère)