Simuler clique bouton

Résolu
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008 - 5 déc. 2004 à 16:34
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008 - 2 mars 2005 à 15:29
Salut,

Avec spy++ j'ai récupérai le handle d'un bouton (d'un programme qui n'est pas de moi).

Je voudrais simuler un clique sur ce bouton(pas forcément un clique mais je veux que ça ouvre la fenêtre qui est en rapport avec ce bouton).

J'ai essayer de délectionner ce bouton pour ensuite simuler une frappe sur entée mais j'arrive pas à le selectionner.

Pouvez vous m'aider ???

15 réponses

BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 20
5 déc. 2004 à 17:10
PostMessage(hwndParent, WM_COMMAND, buttonID, hbutton);

ciao...
BruNews, MVP VC++
3
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
5 déc. 2004 à 17:32
Ok merci.
Mais comment je fais pour avoir l'ID du bouton ???

Et pour le hbutton ???
j'ai cherché sur MSDn et j'ai pas trouvé... ça peut pas être un HWND car le dernier param de PostMessage est pas un HWND.

Pourrais tu m'en dire un peu plus STP ???
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 20
5 déc. 2004 à 17:49
PostMessage sert a poser un message dans la pile d'appels d'un prog, on met ce qu'on veut dans les params (enfin du coherent seulement.
WM_COMMAND attend bien le hwnd du controle dans lParam donc on le met.
GetDlgItem pour obtenir ce hbutton.

ciao...
BruNews, MVP VC++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
5 déc. 2004 à 17:54
L'ID tu l'obtiens aussi avec Spy++: "ID de contrôle" dans general, mais s'il vaut 0 ca sert à rien
0

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

Posez votre question
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
5 déc. 2004 à 18:00
Si j'obtient le hbutton avec GetDlgItem, ça me met ça comme erreur :

PostMessageA' : cannot convert parameter 4 from 'struct HWND__ *' to 'long'
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 20
5 déc. 2004 à 18:03
et le cast, jamais entendu parler ?
(long) hbutton

ciao...
BruNews, MVP VC++
0
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
5 déc. 2004 à 18:07
Si...... j'y avait pas pensé ...

Par contre ça marche toujours pas ..

Je fais ça :

hbutton=GetDlgItem(hDlg,3);
PostMessage(hDlg, WM_COMMAND, 3, (long)hbutton);

Mais ça simule pas un clique sur ce boutton.
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 20
5 déc. 2004 à 18:13
hDlg est bien la fenetre mere du bouton j'espere.

ciao...
BruNews, MVP VC++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
5 déc. 2004 à 18:31
Au fait ca pose pas de probleme que ce soient des processus différents?
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 20
5 déc. 2004 à 18:34
Aucun si les handles sont les bons.
On ne passe rien ici qui referencerait une adresse memoire d'un processus donc ça roule.

ciao...
BruNews, MVP VC++
0
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
5 déc. 2004 à 19:59
Mon code c'est ça :

if (!(hDlg = FindWindow(0,"Configuration Utility")))
MessageBox(NULL, "erreur1!", "Error!",0| MB_OK);

if (!(hDlg2 = FindWindowEx(hDlg,0,0,"Site Survey")))
MessageBox(NULL, "erreur2!", "Error!",0| MB_OK);

//hDlg = FindWindowEx(hDlg,0,"ReBarWindow32",0);
if (!(hCtrl = FindWindowEx(hDlg2,0,"Button","&CONNECT")))
MessageBox(NULL, "erreur3!", "Error!",0| MB_OK);

hbutton=GetDlgItem(hDlg,3);
if(!(PostMessage(hDlg, WM_COMMAND, 3, (long)hbutton)))
MessageBox(NULL, "erreur4!", "Error!",0| MB_OK);

Ca a l'air bon, non ???
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 20
5 déc. 2004 à 20:16
Comme je ne connais pas le prog dont tu cherches les handles, voila exemple qui change le titre du bouton 'Démarrer'.

void __stdcall ChangeTitreDemarrer(char *psz)
{
HWND h;
h = FindWindow("Shell_TrayWnd", 0);
if(h) {
h = FindWindowEx(h, 0, "BUTTON", 0);
if(h) SetWindowText(h, psz);
}
}

ciao...
BruNews, MVP VC++
0
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
5 déc. 2004 à 20:50
En fait c'est bon j'ai réussi !!!
Il fallait mettre le idbutton en hexadécimal !
Merci pour votre aide !!!
0
NeoUmbrella Messages postés 117 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 15 janvier 2013
2 mars 2005 à 00:17
Salut, peux tu mettre ton code final stp ?
J'ai le meme probleme, j'ai essayé mais il y 'a un problème.

Merci
0
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
2 mars 2005 à 15:29
Voila mon code :

HWND hDlg;
HWND hbutton;
//...........
hDlg = FindWindow(0,"Configuration Utility");
ShowWindow(hDlg,TRUE);
hbutton=GetDlgItem(hDlg,0x000003EB);
PostMessage(hDlg, WM_COMMAND, 0x000003EB, (long)hbutton);
0