C++, API Win32, et éventuellement MFC : émuler le bouton d'une fenêtre

C++, API Win32, et éventuellement MFC : émuler le bouton d'une fenêtre - Programmation

Marsh Posté le 28-06-2001 à 10:57:32    

Bonjour tout l'monde.
 
Alors, pour ceux qui me suivent depuis un moment, mon appli avance bien, ...pour les autres aussi d'ailleur, même si ils s'en tapent !
 
Bon, revenons en à nos moutons...
 
Voila, dans mon prog, je détecte la précense de fenêtre en me basant sur leur titre (sous windows bien sur !).  
Une fois que g repéré la fenêtre que je cherche, je récupère son handle.
Il s'agit d'une simple boite de dialogue; je voudrais simuler un clilque sur le bouton "OK" de cette fenêtre; mais je trouve pas comment faire ! g bien pensé à envoyer un message, mais quel message envoyer !?

Reply

Marsh Posté le 28-06-2001 à 10:57:32   

Reply

Marsh Posté le 28-06-2001 à 11:14:11    

Récupère le Handle du bouton, puis envoyer WM_LBUTTONDOWN et WM_LBUTTONUP avec SendMessage

Reply

Marsh Posté le 28-06-2001 à 11:16:12    

seblamb a écrit a écrit :

Récupère le Handle du bouton, puis envoyer WM_LBUTTONDOWN et WM_LBUTTONUP avec SendMessage  




 
Ha, j'avais essayé, mais j'avais fais ça sur le Handle de la fenêtre...évidement, c logique ce que tu m'dis, c sur le handle du bouton qu'y faut envoyer ce message !
 
J'essaye et j'reviens dire merci si ça marche !  :D

Reply

Marsh Posté le 28-06-2001 à 11:16:17    

WM_LBUTTONDOWN
 
si tu veux bien connaître les messages, je te conseille de longues nuits de spy++ :) très instructif ...

Reply

Marsh Posté le 28-06-2001 à 11:18:31    

hehe oui j'en ai oublié la moitié :D

Reply

Marsh Posté le 28-06-2001 à 11:32:59    

:D  :D Yesssss, Merci ! :D  :D

Reply

Marsh Posté le 28-06-2001 à 11:34:08    

youdontcare a écrit a écrit :

WM_LBUTTONDOWN
 
si tu veux bien connaître les messages, je te conseille de longues nuits de spy++ :) très instructif ...  




 
Avec Spy++ on peut visionner les messages que les appli s'envoient !?

Reply

Marsh Posté le 28-06-2001 à 11:42:54    

El_gringo a écrit a écrit :

 
 
Avec Spy++ on peut visionner les messages que les appli s'envoient !?  



spy++ intercepte tous les messages reçus par la fenêtre que tu sélectionnes, et permet de filtrer seulement ceux qui t'intéressent.

Reply

Marsh Posté le 28-06-2001 à 11:50:33    

ok !
 
En fait je m'suis emballé trop vite tout à l'heure, ça n'marche pas comme je voudrais:
 En fait, en récupérant le Handler d'un bouton, je peut l'activer, mais je suis sur qu'il y a un moyen, au niveau précédant; donc avec le Handler de la fenêtre contenant le bouton, de faire un truc style WM_OK, pour repérer, dans la fenêtre (ou plutot la MessageBox) le bouton qui à pour identifieur : ID_OK
Parce que j'veux actionner le bouton de validation (celui donc, d'ID_OK) qui ne porte jammais le même libellé (des fois "OK", d'autres "Valider", ou encore "Oui", etc. Je n'peux donc pas me baser sur le libellé du bouton
...si vous comprenez encore ce que j'raconte ça serai cool de m'aider ! :D

Reply

Marsh Posté le 28-06-2001 à 13:42:19    

Si le bouton a pour nom de ressource IDOK, on peut envoyer à la feuille de HWND hWndF un message
SendMessage(hWndF, WM_COMMAND, IDOK, 0L);
Voire  
SendMessage(hWndF, WM_COMMAND, IDCANCEL, 0L); pour le bouton CANCEL (ou l'équivalent (selon comment le prog est écrit, moi j'essaie de faire comme cela) de frappe du bouton ESCAPE : abandon)
 
Dans les ressources, IDOK et IDCANCEL doivent être définis par défaut (sauf erreur, je les ai jamais déclarés et ça marche). Mais chaque développeur peut choisir les valeurs qu'il veut.
 
Si on a le numéro du bouton à "exécuter" et le handle de sa feuille "mère", le message devrait agir.
 
A tester.  :)

Reply

Marsh Posté le 28-06-2001 à 13:42:19   

Reply

Marsh Posté le 28-06-2001 à 13:59:16    

Le problème, c que g justement pas la main sur l'appli qui génère la MessageBox détectée (celle sur laquelle je veux simuler le clic sur le bouton de Validation) donc ça n'peux pas fonctionner (g d'ailleur vérifié au cas ou !)
à mon avis, c que je cherche à faire est impossible... :sweat:

Reply

Marsh Posté le 28-06-2001 à 14:51:56    

Ca dépend. Si un "Spy qq chose" permet de suivre ce qui se passe quand on clique sur le dit bouton (en donnant son numéro absolu, et non juste l'évenement), voire en extrayant les ressources pour voir quels sont les identificateurs (Avec BC3 en 16 bits, ça marche (peut-être pas avec tous les progs, surtout si écrit en VB !!!)), en BC5, j'ai essayé sur un prog à moi, on y arrive.
On récupère l'équivalent du fichier RC d'origine, avec les valeurs numériques des contrôles au lieu des symboles mnémoniques utilisés par le développeur.
 
Sinon, si c'est possible de récupérer les coordonnées du bouton, bouger le curseur en face (logiciellement, je fais ça mais en "interne" ), faire un SetActiveWindow sur la boîte de dialogue puis envoyer message WM_LBUTTONDOWN puis UP (souvent réagit à LBUTTONUP) mais pas certain (du tout)...

Reply

Marsh Posté le 28-06-2001 à 15:00:50    

Je crois que t'as pas bien compris mon probème...en fait, une fois que g le Handler du bouton à activer je peux le faire sans pb (et ça marche) mais c que je veux, c trouver les bouton qui fera l'équivalent d'un bouton "OK" (le pb c qu'un bouton "OK" peut s'appeler "Valider", "oui", ....)

Reply

Marsh Posté le 28-06-2001 à 15:04:12    

yep a mon avis y'a pas de solution miracle ... t'es bon pour tester un bon paquet d'apps et voir comment elles réagissent, et si chacune fait son schmilblick : bienvenue dans la liste de cas particuliers :D

Reply

Marsh Posté le 29-06-2001 à 09:37:48    

A priori, y a rien de "général". Sur une feuille, un bouton "&OK" (ou "&Action", ou autre) peut avoir le numéro 10, 100, 2354, 661, .. selon le hasard des volontés du développeur. Pour savoir quel il est (pour chaque feuille d'une appli), si on ne l'a pas écrite, à part extraire les ressources (si possible), y a ? rien.
 
Il n'y a pas de fonction "ValidateBoutonOK" qu'on utilise à chaque fois qu'on veut sortir (et unloader la feuille). On peut même avoir un bouton qui sauve une config puis fait quitter, sans avoir besoin de quitter par le bouton OK !! (j'en ai écrit un comme cela).
 
Le but, c'est de faire un PC fantôme, où les applis se chargent toute seules, les boutons sont cliqués sans y toucher ?
Ou pour faire un didacticiel sur l'utilisation d'un soft ?

Reply

Marsh Posté le 29-06-2001 à 14:44:05    

CARBON_14 a écrit a écrit :

A priori, y a rien de "général". Sur une feuille, un bouton "&OK" (ou "&Action", ou autre) peut avoir le numéro 10, 100, 2354, 661, .. selon le hasard des volontés du développeur. Pour savoir quel il est (pour chaque feuille d'une appli), si on ne l'a pas écrite, à part extraire les ressources (si possible), y a ? rien.
 
Il n'y a pas de fonction "ValidateBoutonOK" qu'on utilise à chaque fois qu'on veut sortir (et unloader la feuille). On peut même avoir un bouton qui sauve une config puis fait quitter, sans avoir besoin de quitter par le bouton OK !! (j'en ai écrit un comme cela).
 
Le but, c'est de faire un PC fantôme, où les applis se chargent toute seules, les boutons sont cliqués sans y toucher ?
Ou pour faire un didacticiel sur l'utilisation d'un soft ?  




 
C'est faire, enfin, c comme si j'voulais faire une appli fantôme.
en fait je fait un lanceur d'application qui va être utilisé de nuit (sans intervention humaine) je doit donc détecter les éventuelles fenêtres d'erreur qui peuvent être générés par les appli que mon prog lance. Et, s'il y a, je simule un clique sur le bouton "OK" de la fenêtre d'erreur.
Je voulais cliquer sur le bouton de validation à chaque fois, mais en fait c même mieux, maintenant je simule un clique sur le bouton qui à le focus...

Reply

Marsh Posté le 29-06-2001 à 15:19:57    

En espérant que l'erreur éventuelle ne provoque pas un :
"Voulez-vous formater le disque C:\ ?"  :)  :)  
Mais en général, c'est le bouton "&Non" qui a la préférence...

Reply

Marsh Posté le 29-06-2001 à 15:30:54    

CARBON_14 a écrit a écrit :

En espérant que l'erreur éventuelle ne provoque pas un :
"Voulez-vous formater le disque C:\ ?"  :)  :)  
Mais en général, c'est le bouton "&Non" qui a la préférence...  




 
A moins que le type qui à programmé l'appli que je lance soit affreusement vicieux et pervers et n'ai eu envie de tendre un piège sans scrupules au pauvre utilisateur qui n'y connais souvent pas grand chose. Le focus par défaut ne sera jammais sur le bouton de confirmation... Enfin, espèront ! :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed