Pb utilisation "PostMessage" pour simuler click souris

Lustuc Messages postés 30 Date d'inscription lundi 18 août 2008 Statut Membre Dernière intervention 20 octobre 2009 - 28 août 2009 à 12:05
ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 - 28 août 2009 à 17:32
Je cherche à faire un petit programme en C permétant de cliquer sur des applications qui ne sont pas forcément en premier plan.

J'ai le handle de la fenetre sur laquelle je veux cliquer et la position (en pixel) du click dans la fenetre.

J'ai testé les fonctions suivantes (x et y étant les coordonnées du click):

Pour en enfoncer le bouton gauche de la souris :
PostMessage(handle, WM_LBUTTONDOWN, 0, MAKELPARAM(x,y));
ou PostMessage(handle, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(x,y));

Pour lacher le bouton gauche de la souris :
PostMessage(handle, WM_LBUTTONUP, 0, MAKELPARAM(x,y));

et .... rien !

ça compile bien, ça ce lance bien, mais ça ne fait rien, mais rien de chez rien !

please help me.......

4 réponses

fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
28 août 2009 à 14:08
Je ne sais pas trop, mais tu connais le hwnd, donc tu dois pouvoir retrouver la position de la fenêtre. Regarde du côté de mouse_event (mais ça fait peut-être déplacer le curseur).
0
Lustuc Messages postés 30 Date d'inscription lundi 18 août 2008 Statut Membre Dernière intervention 20 octobre 2009
28 août 2009 à 15:14
Le problème de mouse_event c'est qu'il faut que la fenêtre soit au premier plan, ce qui n'est pas mon cas.
0
ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 2
28 août 2009 à 17:31
Bonjour,

Attention à qui tu envoies les messages, pour cliquer sur un bouton il faut envoyer WM_LBUTTONDOWN et WM_LBUTTONUP au bouton lui-même et pas à sa fenêtre parent, en coordonnées X,Y, prends 1,1. Tu trouveras facilement l'identifiant du bouton avac Spy++.

Ca donne quelque chose du genre :

HWND hBtn = GetDlgItem(handle,ID_du_bouton);
SendMessage(hBtn,WM_LBUTTONDOWN,0,MAKELPARAM(1,1));
SendMessage(hBtn,WM_LBUTTONUP,0,MAKELPARAM(1,1));

Tu peux aussi simuler un click en envoyant un WM_COMMAND à la fenêtre avec l'identifiant du bouton, c'est plus simple. Ceci à condition que le bouton soit un vrai bouton, j'ai déjà vu des applications dont les boutons n'envoyaient pas de WM_COMMAND après un click.
0
ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 2
28 août 2009 à 17:32
Euh, j'ai pas bien lu la demande, ne tenez pas compte de ma réponse
0
Rejoignez-nous