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

  FORUM HardWare.fr
  Programmation

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°43313
El_gringo
Posté le 28-06-2001 à 10:57:32  profilanswer
 

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

mood
Publicité
Posté le 28-06-2001 à 10:57:32  profilanswer
 

n°43315
seblamb
Posté le 28-06-2001 à 11:14:11  profilanswer
 

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

n°43316
El_gringo
Posté le 28-06-2001 à 11:16:12  profilanswer
 

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

n°43317
youdontcar​e
Posté le 28-06-2001 à 11:16:17  profilanswer
 

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

n°43320
youdontcar​e
Posté le 28-06-2001 à 11:18:31  profilanswer
 

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

n°43324
El_gringo
Posté le 28-06-2001 à 11:32:59  profilanswer
 

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

n°43325
El_gringo
Posté le 28-06-2001 à 11:34:08  profilanswer
 

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

n°43328
youdontcar​e
Posté le 28-06-2001 à 11:42:54  profilanswer
 

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.

n°43336
El_gringo
Posté le 28-06-2001 à 11:50:33  profilanswer
 

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

n°43358
Carbon_14
Posté le 28-06-2001 à 13:42:19  profilanswer
 

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

mood
Publicité
Posté le 28-06-2001 à 13:42:19  profilanswer
 

n°43366
El_gringo
Posté le 28-06-2001 à 13:59:16  profilanswer
 

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:

n°43389
Carbon_14
Posté le 28-06-2001 à 14:51:56  profilanswer
 

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

n°43392
El_gringo
Posté le 28-06-2001 à 15:00:50  profilanswer
 

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", ....)

n°43393
youdontcar​e
Posté le 28-06-2001 à 15:04:12  profilanswer
 

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

n°43550
Carbon_14
Posté le 29-06-2001 à 09:37:48  profilanswer
 

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 ?

n°43671
El_gringo
Posté le 29-06-2001 à 14:44:05  profilanswer
 

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

n°43692
Carbon_14
Posté le 29-06-2001 à 15:19:57  profilanswer
 

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

n°43700
El_gringo
Posté le 29-06-2001 à 15:30:54  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

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

 

Sujets relatifs
[VB / API Windows] Paramètres régionaux[JavaScript] centrage de fenetre
HTML: afficher une image de taille égale à la fenetreC++, API
Mettre une image pour remplacer le bouton submit ...[C/C++/FMOD] Api musicale
[php] Qui pourrait faire ça pour mon site en échange d'un bouton ?[Visual C++] Forcer un focus sur un bouton quelconque ?
[C++/opengl] Comment créer une fenetre subwindows ?[Visual C++] Changer l'icône du programme MFC
Plus de sujets relatifs à : C++, API Win32, et éventuellement MFC : émuler le bouton d'une fenêtre


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR