Simuler clique bouton [Résolu]

Signaler
Messages postés
429
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2008
-
Messages postés
429
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2008
-
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

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
PostMessage(hwndParent, WM_COMMAND, buttonID, hbutton);

ciao...
BruNews, MVP VC++
Messages postés
429
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2008

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 ???
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
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++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
L'ID tu l'obtiens aussi avec Spy++: "ID de contrôle" dans general, mais s'il vaut 0 ca sert à rien
Messages postés
429
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2008

Si j'obtient le hbutton avec GetDlgItem, ça me met ça comme erreur :

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

ciao...
BruNews, MVP VC++
Messages postés
429
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2008

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.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
hDlg est bien la fenetre mere du bouton j'espere.

ciao...
BruNews, MVP VC++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Au fait ca pose pas de probleme que ce soient des processus différents?
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
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++
Messages postés
429
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2008

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 ???
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
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++
Messages postés
429
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2008

En fait c'est bon j'ai réussi !!!
Il fallait mettre le idbutton en hexadécimal !
Merci pour votre aide !!!
Messages postés
117
Date d'inscription
vendredi 5 novembre 2004
Statut
Membre
Dernière intervention
15 janvier 2013

Salut, peux tu mettre ton code final stp ?
J'ai le meme probleme, j'ai essayé mais il y 'a un problème.

Merci
Messages postés
429
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2008

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