SENDKEYSEX => SIMULER UNE TOUCHE DANS UNE FENETRE PRÉCISE

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 27 mars 2007 à 18:08
ptard Messages postés 27 Date d'inscription dimanche 5 novembre 2006 Statut Membre Dernière intervention 30 septembre 2011 - 30 sept. 2011 à 13:38
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/41974-sendkeysex-simuler-une-touche-dans-une-fenetre-precise

ptard Messages postés 27 Date d'inscription dimanche 5 novembre 2006 Statut Membre Dernière intervention 30 septembre 2011
30 sept. 2011 à 13:38
Bonjour
Merci pour ce code qui marche tres bien.Je n'y connais pas grand chose et je n'arrive pas à simuler des combinaisons de touches comme ALT(menu)+F, ou comme les touches de fonctions etles autres touches speciales(MAJ,CAPSLOCK,TAB,SHIFT.
Merci si tu as une solution
PTARD
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
16 nov. 2010 à 10:20
pas utile de piloter au clavier...
Excel est pilotable via COM
moussafir69 Messages postés 3 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 25 décembre 2009
25 déc. 2009 à 22:45
Bonjour ,
Moi j'ai un probleme peut etre il sera pas compliquer a traiter par la fonction sendkey , je veux en effet piloter le menu excel et celui d'une autre application par des alt + c en dans excel et alt + o dans l'autre application , car je dois copier des données d'excel et les placées dans les champs de saisie de l'application .c'est opération répétitive que je placerai dans une boucle aprés .
Si quelqu'un peut m'aider , je serai reconnaissant .
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
10 mars 2009 à 07:34
utilises System.Windows.Forms.Keys
GrandByblos Messages postés 2 Date d'inscription mercredi 27 décembre 2000 Statut Membre Dernière intervention 18 novembre 2010
9 mars 2009 à 14:27
Bonjour.

Je me permets deux petites questions :

- Comment intégrer cette procédure à un projet VB.NET 2008 ?
En effet, il ne comprend pas le VBRUN.KeyCodeConstants (et je sèche un peu, j'avoue ^_^).

- En fait, j'essaye d'envoyer des codes touches à une application tierce, dont je ne peux modifier le source.
A l'heure actuelle, j'arrive à lui envoyer des touches en lui donnant le focus (par OpenIcon et SetForegroundWindow) puis en lui envoyant les touches via SendWait.
C'est fonctionnel, sauf dans le cas où la session utilisateur est verrouillée (mon appli devant se lancer le soir, vers 23h, et devant être déployée, je n'ai pas la maitrise de l'état de la session) ; en effet, dans le cas d'une session verrouillée, je ne peux plus donner le focus (forcément me direz-vous) et donc ça ne fonctionne plus ...

Avec cette procédure, me sera-t-il possible d'envoyer des touches (F1, etc.) à une application qui n'est pas au 1er plan ?

Merci d'avance pour vos réponses !

Cordialement
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
23 déc. 2008 à 09:29
On modifie l'etat du clavier.
en placant un DoEvents (ou ici, un Sleep 1) on redonne rapidement la main au systeme.
Ce dernier va regarder la fenêtre qui détiens le focus du clavier, et l'avertir des modifications du clavier.

pour l'avertir, elle passe par la voie standard: elle lui transmets des messages qui seront stockés dans une file d'attente.

Ces messages seront ensuite traités par la cible, selon sa disponibilité, bien sur, mais dans l'ordre de la file. Pas de perte de touche, donc.
boudas Messages postés 13 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 8 octobre 2008
8 oct. 2008 à 17:46
bonjour,

une petite question, comment peut-on savoir que le logiciel a bien recu la touche ?
car pour l'instant, on en a aucune assurance (dans le bloc note, il ne prend pas forcément en compte la touche "maj") (je l'utilise pour écrire des lettres en majuscules par exemple.)

d'avance merci
cs_Titant Messages postés 103 Date d'inscription mardi 2 juillet 2002 Statut Membre Dernière intervention 21 juillet 2008
21 juil. 2008 à 01:56
Salut,

Moi j'ai juste une petite question.
Comment on peu faire pour envoyer le textbox directement.
cad pas lettre par lettre mais un mot directement ?

Merci
pochagnole Messages postés 4 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 20 décembre 2007
20 déc. 2007 à 14:28
Merci beaucoup pour ces info. Je n'avais pas compris la différence entre VB.NET, VB6 et VBA.

Je vais m'en remettre au forum !
Chatbour Messages postés 71 Date d'inscription jeudi 27 juillet 2006 Statut Membre Dernière intervention 12 juillet 2009 10
20 déc. 2007 à 12:18
VB.NET (VB 2005) est un autre langage très différent..

tu veux convertir ce code en VBA : il vaut mieux poser la question sur le forum et mettre le lien vers la source..

Bonne chance :)
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
20 déc. 2007 à 12:12
Comme Chatbour l'a dis, c'est que sous vb6, pas de vbexpress ou autre.
pochagnole Messages postés 4 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 20 décembre 2007
20 déc. 2007 à 11:50
Ok. Mince alors. N'y a-t-il pas moyen de l'adapter en vba ?

Désolé, je n'y connais pas grand chose, je débute (à noter que j'ai essayé le même code sous VB express 2005 et que j'avais les mêmes problèmes...).
Chatbour Messages postés 71 Date d'inscription jeudi 27 juillet 2006 Statut Membre Dernière intervention 12 juillet 2009 10
20 déc. 2007 à 10:43
Salut,

Ce code n'est pas du VBA : il ne fonctionne pas sous la suite Office, mais sur VB6..
pochagnole Messages postés 4 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 20 décembre 2007
20 déc. 2007 à 09:04
Bonjour tout le monde !

Moi j'ai un gros problème, je n'arrive pas à faire fonctionner cette source sous access 2000.

Il me renvoie une erreur à cette ligne : "Public Sub SendKeysEx(ByVal vhTargetWnd As Long, ByVal veKey As VBRUN.KeyCodeConstants, Optional ByVal veShift As VBRUN.ShiftConstants, Optional ByVal vbExtendedKey As Boolean = False)"

Apparemment, il ne connaît pas VBRUN. Il me dit "Type défini par l'utilisateur non défini".
Dans les références, je n'ai pas "visual basic runtime objects and procedures". Est-ce que le problème peut venir de là. Si oui, comment faire pour avoir cette référence : quand je veux ajouter vb6fr.dll, j'ai une erreur... Déjà que j'ai dû rajouter VB6.OLB car je ne l'avais pas sur mon PC (pourtant j'ai installé les runtime vb6).

Aidez-moi, please !

MERCI !!!
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
3 déc. 2007 à 12:27
Ctrl+C/V ?

SendMessage WM_COPY et WM_PASTE ne convient pas ?
pulpul74 Messages postés 77 Date d'inscription jeudi 11 octobre 2007 Statut Membre Dernière intervention 27 septembre 2010
3 déc. 2007 à 10:05
Source très sympa, très utile, par contre je trouve domage que certaines combinaisons de touches ne marchent pas forcement, comme par exemple un ctrl-C et ctrl-V.Mais bon déja ca peut etre pas mal dans certaines situation, merci!
phixfoxphixfox Messages postés 2 Date d'inscription mardi 23 octobre 2007 Statut Membre Dernière intervention 25 octobre 2007
25 oct. 2007 à 14:35
Merci bcp pour ce code !!

mais je dois me faire des noeud au cerveau en se moment car je n'arrive pas a faire ce que je veux
donc sendkeysex(handle,codetouche,....) te permet d'envoyer un caractere dans une appli externe
c'est genial
mais d'apres ce que je comprends ce caractere est codé donc 49 permet d'envoyer un "1" etc
j'aimerai pouvoir envoyer une chaine de caractere de ce type directement
"12*45={entrée}Merci{ctrl}A{ctrl}C"
par une fonction du genre :
sendstringex(handle,"12*45={entrée}Merci{ctrl}A{ctrl}C" )
pourrai tu m'aider , car je boucle lamentablement sur ce pb

Merci par avance
Chatbour Messages postés 71 Date d'inscription jeudi 27 juillet 2006 Statut Membre Dernière intervention 12 juillet 2009 10
7 sept. 2007 à 02:52
Bonne source :)

j'ai une question : comment faire l'inverse, c'est à dire contrôler par exemple un TextBox depuis Notepad (j'ai une bonne imagination ;) )..
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
14 juin 2007 à 10:25
Merci, je connaissais pas !!!
Je vais plancher la dessus.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
14 juin 2007 à 04:41
Le Alt, je ne sais pas, comme ça, faut que je testes

Ctrl + Shift + Z... je dirai :
SendKeysEx xxx, vbKeyZ, vbShiftMask Or vbCtrlMask

je regarderai ca de plus pres

ceci dit, il y a BEAUCOUP plus simple pour faire ce que tu cherches a faire...
lances Spy++ et Photoshop

espionne ta fenetre

cliques dans ton menu.

et recherches dans SPY++ le message WM_COMMAND correspondant.
lParam et wParam te renverront les précieux parametres qu'il te suffira de retransmettre via un SendMessage pour faire executer ta commande. Tu sera independant des raccourcis clavier, etc... et en plus, ce sera plus rapide ^^

pas clair ?

pas de soucis, redemande moi.... je reexpliquerai ^^
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
13 juin 2007 à 20:08
Le code fonctionne apparement, mais quand je veux utiliser la combinaison control + Z sous adobe photoshop alors la le resultat est considerer par adobe que comme un Z sans le Control.

Puis aussi comment faire la combinaison Control + Alt + Z ou Control + Shift + Z qui sont très important sous photoshop.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 mai 2007 à 19:08
tout dépend du jeu, et de la technologie qu'il utilise...

fort a parier qu'il s'agit de DirectInput, qui traite directement avec le matériel, sans demander quoi que ce soit à Windows....
Uvatha Messages postés 34 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 17 mai 2007
17 mai 2007 à 20:05
J'aurais une petite question...

J'ai essayé ta source Renfield et elle fonctionne très bien... seulement, je voulais simuler des touches dans un jeu et pour une raison inconnue, ça ne fonctionne pas, ça ne passe même pas le

If IsWindow(vhTargetWnd) Then

Je ne connais pas trop bien l'API IsWindow mais je suppose que ça ne fonctionne tout simplement pas pour un jeu.

Si quelqu'un a une solution à ce problème, merci de bien vouloir m'en faire part.

9/10 pour la source, très claire et assez bien commentée.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
28 mars 2007 à 14:34
pas tout a fait pareil, en fait...

source très interessante...
ym_trainz surveille le clavier. si une sequence particuière de touches est detectée, il simule n pressions de touches au clavier, pour automatiser certaines choses.

ici, je simule la pression de touches a destination d'appli (de fenetres) n'ayant pas forcément le focus.
VBGenesis Messages postés 292 Date d'inscription samedi 25 février 2006 Statut Membre Dernière intervention 22 février 2009
28 mars 2007 à 12:53
Je n'ai pas encore regardé la source (désolé) mais tu peux aller voire cette source de ym_trainz si tu veux :
http://www.vbfrance.com/code.aspx?ID=39754
Ca gère le sendkeys en fonction de la fenêtre active (récupération du titre de la fenêtre). Je crois que c'est comparable a ta propre source.

A+
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
28 mars 2007 à 10:47
je viens d'ajouter le parametre veShift , afin de pouvoir simuler des raccourcis clavier, comme Ctrl+S (dans l'exemple du zip)
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
27 mars 2007 à 23:39
excellent! comme le nom de la source
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
27 mars 2007 à 18:08
keybd_event (ou SendInput)est pas mal également,
mais dans le cas présent, je simule une pression de touche sur une appli en fond, afin de lui dire "je suis là"...

donc je ne peux pas faire de SetFocus(après un AttachThreadInput) etc, sinon ca ait apparaitre la fenetre cible au dessus de ma fenetre courante, ca clignotte... pas top, quoi ^^
Rejoignez-nous