Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Clic sur un bouton avec API SendMessage

4 réponses
Avatar
teddy
Bonjour,

A partir d'un petit programme, j'arrive à envoyer un clic sur tous les
boutons d'une fenêtre d'une application externe avec SendMessage sauf pour un
bouton récalcitrant. Voici le code :

Const BM_CLICK As Long = &HF5&
Dim i as long, j as long
i = FindWindow&(Classe, "titre de la fenêtre de l'appli externe")
j = FindWindowEx(i, ByVal 0&, "Button", "titre du bouton")
Call SendMessage(j, BM_CLICK, 0, 0)

Dans l'appli cible, peut-il y avoir une astuce genre fenêtre fille, etc ...
qui gêne l'accès à mon bouton ou bien mon code avec SendMessage est-il
erronné ?
Merci beaucoup pour votre avis. Je cherche depuis une semaine sans succès.
Teddy

4 réponses

Avatar
Picalausa François
"teddy" a écrit dans le message de news:

Const BM_CLICK As Long = &HF5&
[...]
Dans l'appli cible, peut-il y avoir une astuce genre fenêtre fille, etc
...
qui gêne l'accès à mon bouton ou bien mon code avec SendMessage est-il
erronné ?



Hello,

L'utilitaire spy++ (spyxx.exe; généralement dans C:Program FilesMicrosoft
Visual StudioCommonTools) fourni avec Visual Studio 6 devrait pouvoir
t'aider. Il afficher toutes les fenêtres, leur classe, etc.
Eventuellement envoyer WM_LBUTTONDOWN et WM_LBUTTONUP peut aider...

--
Picalausa François
Avatar
teddy
OK, merci.
J'ai bien utilisé SPY++ mais le "treeview" qu'il retourne est assez complexe
pour y retrouver mes objets de fenêtres et trouver ce qui ne va pas.
Je sais d'ailleurs les lister ainsi que leur classe et handle.

Le bouton que je cherche à cliquer via mon programme ne fonctionne pas sauf
avec un vrai clic manuel à la souris.
Il y a donc une astuce sur ce fameux bouton (un masque, une couche frame, je
ne sais pas quoi ??)
Les autres objets de la fenêtre se laissent bien manipuler par mon
programme, je peux tout faire sur cette fenêtre sauf ce que je veux
:-((((((((((((

J'ai remplacé par SendMessage par PostMessage, mais en fait, ça ne change
rien.

j = FindWindowEx(i, ByVal 0&, "Button", "Oui")
'Call SendMessage(j, BM_CLICK, ByVal 0&, ByVal 0&)
Call PostMessage(j, WM_KEYDOWN, VK_RETURN, WM_KEYUP)

Merci encore, si vous avez déjà trouvé ce genre de difficulté, répondez-moi.

Ted

"Picalausa François" a écrit dans le message de news:

"teddy" a écrit dans le message de news:

Const BM_CLICK As Long = &HF5&
[...]
Dans l'appli cible, peut-il y avoir une astuce genre fenêtre fille, etc
...
qui gêne l'accès à mon bouton ou bien mon code avec SendMessage est-il
erronné ?



Hello,

L'utilitaire spy++ (spyxx.exe; généralement dans C:Program
FilesMicrosoft Visual StudioCommonTools) fourni avec Visual Studio 6
devrait pouvoir t'aider. Il afficher toutes les fenêtres, leur classe,
etc.
Eventuellement envoyer WM_LBUTTONDOWN et WM_LBUTTONUP peut aider...

--
Picalausa François



Avatar
Picalausa François
" teddy" a écrit dans le message de news:
O%
OK, merci.
J'ai bien utilisé SPY++ mais le "treeview" qu'il retourne est assez
complexe pour y retrouver mes objets de fenêtres et trouver ce qui ne va
pas.



Hello,

Dans la fenêtre de recherche (Ctrl+F), il y a le "Finder tool". Il suffit de
cliquer glisser le viseur sur le bouton cible pour déterminer la fenêtre la
plus proche (un rectangle indique celle-ci).
De même, en cliquant avec le bouton droit sur une fenêtre du treeview, il y
a la possibilité de "Highlight" qui affiche assez clairement la fenêtre en
question.
Il se peut que le bouton n'ait pas de fenêtre! Dans ce cas, WM_LBUTTONDOWN
(envoyé à la fenêtre "contenant" le bouton) sera plus approprié, le seul
inconvénient étant la détermination de la position du bouton dans la zone
cliente du parent.

--
Picalausa François
Avatar
teddy
Merci encore.
Ted

"Picalausa François" a écrit dans le message de news:
%
" teddy" a écrit dans le message de news:
O%
OK, merci.
J'ai bien utilisé SPY++ mais le "treeview" qu'il retourne est assez
complexe pour y retrouver mes objets de fenêtres et trouver ce qui ne va
pas.



Hello,

Dans la fenêtre de recherche (Ctrl+F), il y a le "Finder tool". Il suffit
de cliquer glisser le viseur sur le bouton cible pour déterminer la
fenêtre la plus proche (un rectangle indique celle-ci).
De même, en cliquant avec le bouton droit sur une fenêtre du treeview, il
y a la possibilité de "Highlight" qui affiche assez clairement la fenêtre
en question.
Il se peut que le bouton n'ait pas de fenêtre! Dans ce cas, WM_LBUTTONDOWN
(envoyé à la fenêtre "contenant" le bouton) sera plus approprié, le seul
inconvénient étant la détermination de la position du bouton dans la zone
cliente du parent.

--
Picalausa François