Utilisation de Spy++

sunvi Messages postés 34 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 25 août 2009 - 24 juil. 2009 à 14:36
lucas147 Messages postés 1 Date d'inscription samedi 8 août 2009 Statut Membre Dernière intervention 8 août 2009 - 8 août 2009 à 19:39
Bonjour,
je fais un programme qui devrait automatiser une tâche dans un logiciel. Manuellement, on peut effectuer cette tâche de 2manières:
1- en appuyant sur un bouton d'une barre d'outils
2- en faisant un choix dans un menu

j'essaye d'utiliser Spy++, enfin je le découvre...
j'essaye de sélectionner la plus petite fenêtre, et de bouger tout doux sur la fenêtre, mais je me retrouve toujours avec au moins une centaine de messages captés, et je ne sais pas trop lequel est celui que je cherche.
j'ai même enregistré les messages captés en utilisant les 2manières d'activation, en cherchant une similitude, mais non, je trouve pas!

j'ai besoin de vos conseils !

Merci d'avance!
A voir également:

12 réponses

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
24 juil. 2009 à 15:31
Tu peux filtrer les messages pour ne garder que ceux qui t'intéressent (par exemple virer tous les WM_MOUSEMOVE et compagnie...)
Que veux-tu faire exactement?
0
sunvi Messages postés 34 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 25 août 2009
24 juil. 2009 à 16:03
j'ai essayé de filtrer, j'enlève les messages associé à la souris par exemple, mais là je n'obtiens plus rien... pour le reste je ne sais pas trop ce que c'est, j'essaye à l'aveuglette...
pour le moment je veux capter le code de mon bouton, et le message qui lui est envoyé pour déclencher le processus, pour simuler le click sur ce bouton dans SendMessage.

Pourriez vous me dire ce que signifie "WM_NOTIFY idCtrl:59392 pnmh:0012F9D4" par exemple? et c'est quoi les "S" et "R" qui apparaissent entre le handle et les "WM_..."?

Merci!!!
0
cs_alfred2009 Messages postés 6 Date d'inscription samedi 18 juillet 2009 Statut Membre Dernière intervention 28 juillet 2009
26 juil. 2009 à 20:53
Le message WM_NOTIFY correspond à une notification d'un contrôle vers la fenêtre parente. Dans ton exemple, tu as l'ID du contrôle, pnmh devrait correspondre à p_ointer n_otification m_essage h_eader, que l'on utilise dans le traitement du message. S correspond à Send de la fonction SendMessage, R correspond à Return de la fonction SendMessage, dans ce cas il s'agit d'un appel synchrone.

Si j'ai bien compris ton besoin, tu voudrais que le choix d'une option de menu ait la même action que l'appui sur le bouton. La simulation de l'appui sur bouton existe bien, mais tu ne le verras pas avec spy++ puisque la simulation n'est pas en place ! Regarde l'utilisation du message BM_CLICK, à envoyer au bouton par SendMessage.
0
sunvi Messages postés 34 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 25 août 2009
27 juil. 2009 à 09:52
Merci pour les explications alfred2009!!
sinon je crois que t'as pas vraiment compris mon besoin: le choix d'une option du menu, et le bouton raccourci existent déjà tous les 2, dans un logiciel dont je dois automatiser l'exécution.
Donc tu crois que si j'envoie un BM_CLICK au pnmh que j'ai trouvé ça devrait marché?
ce qui me tracasse c'est l'ID du contrôle d'une part, et la notification à envoyer d'autre part....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_alfred2009 Messages postés 6 Date d'inscription samedi 18 juillet 2009 Statut Membre Dernière intervention 28 juillet 2009
27 juil. 2009 à 11:07
Ce que je te suggère, c'est d'envoyer BM_CLICK au contrôle. Dans le gestionnaire de ton menu, tu fais un
::SendMessage( Handle_du_Controle, BM_CLICK, 0, 0 ); // appel Win32

Attention, le pnmh que tu as vu dans spy++ n'est pas à utiliser - réutiliser en dehors de cas précis et pointus, et par celui qui maîtrise l'emission du WM_NOTIFY.
0
sunvi Messages postés 34 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 25 août 2009
27 juil. 2009 à 11:38
Mais c'est effectivement ça qui me bloque: le handle du controle, je ne le connais pas
Les logiciels à gérer sont commercialisés, je n'ai pas leurs codes sources, donc il faut que je me débrouille pour trouver le handle, on m'a conseillé spy++...
tu peux me dire où le trouver exactement?
merci!
0
cs_alfred2009 Messages postés 6 Date d'inscription samedi 18 juillet 2009 Statut Membre Dernière intervention 28 juillet 2009
27 juil. 2009 à 14:07
Spy++ va te donner le handle du bouton, mais celui-ci peut/va changer d'une exécution à l'autre.
Tu peux faire ce que fait Spy++ par programme, pourvu que tu aies un moyen de reconnaître la fenêtre principale et le bouton, par leur texte par exemple. Dans ce cas tu énumères les fenêtres actives (cf EnumWindows pour la fenêtre principale, puis EnumChildWindows pour le bouton), cela te donnera les handles de fenêtre.
0
sunvi Messages postés 34 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 25 août 2009
27 juil. 2009 à 15:03
En fait le bouton appartient à une barre d'outils, EnumWindows me donne l'accès à la fenêtre de mon logiciel toto,quoi que le titre est variable mais il est toujours construit suivant la même règle, donc déterminable. EnumChildWindows me donnera l'accès à la barre d'outils fille de toto "Toolbar" contenant mon bouton, mais même spy++ ne détecte pas une fenêtre plus petite que cette barre d'outils... mon bouton a cependant un nom, ça peut aider?
0
cs_alfred2009 Messages postés 6 Date d'inscription samedi 18 juillet 2009 Statut Membre Dernière intervention 28 juillet 2009
28 juil. 2009 à 08:49
Si Spy++ ne détecte pas de fenêtre, c'est probablement que le bouton n'est pas un contrôle Windows. Dans ce cas, oublie le BM_CLICK et retour à la case départ.

Pour espionner la toolbar, tu peux aussi utiliser l'outil "control spy", disponible sur la MSDN.
0
sunvi Messages postés 34 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 25 août 2009
28 juil. 2009 à 11:15
Si je n'utilise pas le BM_CLICK, comment faire?
Sinon il y a l'autre option: sélectionner une tache dans un menu contextuel, n'est ce pas plus facile??
0
sunvi Messages postés 34 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 25 août 2009
29 juil. 2009 à 11:35
Je crois que j'ai l'id du controle!!
quel message devrais-je lui envoyer?
0
lucas147 Messages postés 1 Date d'inscription samedi 8 août 2009 Statut Membre Dernière intervention 8 août 2009
8 août 2009 à 19:39
bonjour moi jutilise control spy et je sais pas commen il faut faire pour mettre la cam sans ke la personne le save
0
Rejoignez-nous