Bonjour,
Je voudrais savoir si il exisait un moyen de simuler l'apuit d'une touche, dans un autre programme, grace aux fonctions présente dans window.h ou une quelquonque autre libraire.
(En espérent voir poster dans le bon forum )
Bonjour,
Je voudrais savoir si il exisait un moyen de simuler l'apuit d'une touche, dans un autre programme, grace aux fonctions présente dans window.h ou une quelquonque autre libraire.
(En espérent voir poster dans le bon forum )
Je crois que la méthode conseillée, c'est SetForegroundWindow() + SendInput()...
D'accord merci, je vias chercher de ce coté là et je prévien si j'ai un problème
(Nb : J'avais bien poster dans le movais forum >_<)
Edit : Euh bon je suis complètement perdu ^^ Alors, j'ai crus comrpendre qu'il falais déjà capturer la fenêtre cible via FindWindow(). J'ai esseiller donc :
Mais j'obtien un pointeur null >_< (Oui j'ai pensser à ouvrir le bloque note avent)HWND hFore = FindWindow(0,(LPCWSTR)"Sans titre - Bloc-notes");
Ensuite, je n'arive pas à trouver grand chose sur les fonctions SetForegroundWindow et SendInput. J'ai seulement trouver que SetForegroundWindow passe la fenêtre au premier plan si j'ai bien comprit. Mais seulement je voudrais pouvoir simuler une touche du clavier, sans pour autant lui doner le focus
Bref, si vous aviez un petit exemple ou un article qui traite du sujet sa m'aiderai beaucoup
Aie c'est compliqué à faire en plus il faut utiliser des structures ATOM je crois.
On peut utiliser FindWindow sinon tu peux avec les API déterminer les processus en exécutions et obtenir les handles.
Après avoir obtenu le handle on peut prendre effectivement envoyer des messages avec SendMessage.
Prendre FindWindowEx plutot que FindWindow
http://msdn.microsoft.com/library/de...ndwindowex.asp
An application can call this function in the following way.
FindWindowEx( NULL, NULL, MAKEINTATOM(0x8000), NULL );
Chercher une fenêtre (principale) par son titre est quelque peu aléatoire : la plupart des applications n'ont pas un texte prédéfini et constant dans leur barre de titre (sans parler des espacements).Envoyé par JC_Master
Je te conseillerais plutôt d'énumérer toutes les fenêtres principales en cours et d'analyser leurs titres afin d'identifier celle(s) qui t'intéresse(nt).
Ensuite un SetFocus() et un SendMessage()/PostMessage() (faire des essais avec WM_KEYDOWN, WM_KEYUP, WM_CHAR) sur le handle trouvé devraient faire l'affaire.
Euh bon je suis pas douer du tout en anglais donc un eut dure pour moi de comprendre les explications de msdn >_<Envoyé par mat.M
Donc, si j'ai comprit, FindWindowEx selectione une fenêtre via un code hexadécimal, mais il faut déjà trouver le code qui corespond, par exemple, au bloque note... Si je n'arive déjà pas à récupèrer un pointeur sur la fenêtre je suis pas pret d'ariver à envoiller une sucession de caractère
Un petit coup de spy++ (Non-fourni avec la version express) nous informe que la classe de fenêtre du bloc-note est "Notepad" (et non, ce n'est pas le titre).
Donc, un FindWindow("Notepad", NULL); trouvera UNE fenêtre du bloc-note.
Avec un petit EnumWindows()+GetClassName()/GetWindowThreadProcesId(), on peut retrouver la fenêtre DU bloc-note qu'on vient de lancer...
Surtout si on précède la recherche d'un petit WaitForInputIdle()...
Oui mais sa fonctione toujours pas >_< (Pointeur nule en retour de FindWindow)
Sinon je voudrais savoir coment trouver le nom de la classe sans avoir Spy++ Coique vu que ca ne marche déjà pas avec le bloque note...
C'est parce que le paramêtre passé à FindWindow est mauvais ; il faut prendre Spy++ donné en exemple par Medinoc , relever le handle de fenêtre le noter sur un bout de papier et voir en déboguage si tu obtiens le même.Envoyé par JC_Master
C'est exactement celui doner par mériado (J'ai ausi tester "NOTEPAD" et "notepad")Envoyé par mat.M
Pour ca il faut déjà l'avoir...Envoyé par mat.M
As-tu essayé FindWindow(TEXT("Notepad"), NULL); ?
(Oui, j'avais oublié le TEXT() avant. Si tu passes (LPCTSTR)"Notepad", y'a de fortes chances que ce soit normal si ça foire).
Ahhh Effectivement je fesait caEnvoyé par Médinoc
Voila, ca marche
Bon, il ne reste plu qu'a ecrire le programe, utiliser les autres fonction cite, débugguer, coriger... Bref, au boulot
Petite question, comme vous vou en doutez le bute n'est pas de se servire de notpad, mais d'un autre programe ^^ Existe t'il un programe avec les mêmes fonctionalitées de py++?
Edit : J'arive a fermer la fenêtre avec SendMessage(hFore,WM_CLOSE, NULL, NULL); et donc si je veut envoilelr une lêtre je peut utilier SendMessage(hFore,WM_CHAR, 'z', NULL); ?
(D'aprè ce que j'ai comprit j'ai le pointeur vers la fenêtre de notepad, mais pas vers le champ de texte, mais pou le programme ou ca doit s'apliquer je n'ai pa besoin de selectioner un compoant dans la fenêtre, bien que je suis cureieu de avoir comment faire ^^)
WM_CHAR ne peut être envoyé.
WM_KEYDOWN/WM_KEYUP le peuvent, mais des touches comme SHIFT ne passent pas (j'avais essayé, les caractères reçus étaient toujours en minuscules).
Edit: Au fait, de manière générale, on ne caste JAMAIS une chaîne littérale en LPxxSTR. Si ça ne rentre pas tout seul, c'est que la chaîne n'est pas au bon format.
Ok, je vois si j'arive à faire quelque chose avec ca ^^Envoyé par Médinoc
Ok c'et que parfois avec les redéfinition de types je me retrouve à caster, et comme la programation window n'est pas mon fort... ^^Envoyé par Médinoc
Sinon conaissez vous un programme similaire à Spy++ ?
Edit : j'ai trouver ceci :
http://tcharles.developpez.com/simul/
Je vais esseiller d'en tirer le maximume ^^
Je ne connais aucun programme similaire à spy++, mais il m'est déjà arrivé de faire un programme en ligne de commande qui affiche la liste de toutes les fenêtres ouvertes, visibles ou non (mais pas les contrôles).
Je ne connais pas de fonction, mais je connais un message: WM_MOUSEMOVE, WM_LBUTTONDOWN,WM_MOUSEWHEEL etc.
Alors, je me débroille plutot bien ^^ J'ai trouver un programme qui me permet d'avoir de nombreuses informatiosn d'on celle qu'il me falais dnas Spy++, j'ai réusi à prendre le controle de la souris et du clavier, et a envoiller un texte avec des SendMessage
Alors, pour le moment je bloque sur le fait que WM_MOUSEWHEEL n'est pas défini, a cause de la macro :
Qui est griser sous visual c++ (Oh que c'est pratique la coloration syntaxique ^^)#if (_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400)
#define WM_MOUSEWHEEL 0x020A
#endif
J'aimerait pouvoir envoiller un message d'évènement de la souri sans pourtant qu'elle soit réèlement déplacer, et je voulais savoir si je devais passer par un autre moyen que selui décrit sur http://tcharles.developpez.com/simul/ ^^
Atchoum! Désoler, mon alergie a l'anglai qui me reprendEnvoyé par Médinoc
(J'ai vraiment rien comprit à part que ca parle des macros qui varien en fonction des vertions de window... Et je comprend encore mieu sans la traduction de google ^^)
C'est juste que si tu mets #define _WIN32_WINNT 0x400 avant d'inclure windows.h, ça marche.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager