Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3485 connectés 

 


Dernière réponse
Sujet : C++, API Win32, et éventuellement MFC : émuler le bouton d'une fenêtre
El_gringo

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


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
El_gringo

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

Carbon_14 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...
El_gringo

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...

Carbon_14 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 ?
youdontcare 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
El_gringo 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", ....)
Carbon_14 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)...
El_gringo 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:
Carbon_14 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.  :)
El_gringo 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
youdontcare

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.

El_gringo

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 !?

El_gringo :D  :D Yesssss, Merci ! :D  :D
youdontcare hehe oui j'en ai oublié la moitié :D
youdontcare WM_LBUTTONDOWN
 
si tu veux bien connaître les messages, je te conseille de longues nuits de spy++ :) très instructif ...
El_gringo

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

seblamb Récupère le Handle du bouton, puis envoyer WM_LBUTTONDOWN et WM_LBUTTONUP avec SendMessage
El_gringo 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 !?

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)