Bouton OK externe [Résolu]

Signaler
Messages postés
85
Date d'inscription
mardi 23 mars 2004
Statut
Membre
Dernière intervention
27 novembre 2010
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
J'aimerais activer un bouton OK externe à mon application (c'est-à-dire faisant partie d'une autre application) mais en l'activant via la mienne.

Quelqu'un a une idée ?

23 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
A partir du moment où tu connaitras le handle du bouton tu pourras lui envoyer les messages correspondant à un clic (WM_LBUTTONDOWN suivi de WM_LBUTTONUP normalement).
Là je ne peux pas faire de tests, je verrais ça vendredi soir ou durant le WE si tu n'as pas trouver :-)

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
Effectivement ça complique les choses.
Le handle du controle change à chaque création du controle.
Donc il va falloir se baser sur la classe du controle et son texte (légende)
Si tu as Visual Studio affiche ta boite et regarde sa composition avec Spy++.

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
J'avais bien compris que tu voulais faire ça de manière générale.
La seule méthode que je connaisse est d'envoyer les messages WM_LBUTTONDOWN et WM_LBUTTONUP via SendMessage sur le controle concerné.
Mais il faut son handle pour ça.

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
[DllImport("user32.dll")]
private static extern void SendMessage(
IntPtr hwnd,
int msg,
int wparam,
int lparam
);

private const int WM_LBUTTONDOWN = 0x0201;
private const int WM_LBUTTONUP = 0x0202;

Simulation du click :
SendMessage(buttonHandle, WM_LBUTTONDOWN, 0, 0);
SendMessage(buttonHandle, WM_LBUTTONUP, 0, 0);

Maintenant tu peux aussi regarder du côté de la méthode SendDlgItemMessage qui te permettra d'envoyer les messages en connaissant le handle de la boite de dialogue ainsi que l'ID du controle (que tu verras aussi dans les détails du controle dans spy++, il ne change pas a chaque execution normalement)

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
85
Date d'inscription
mardi 23 mars 2004
Statut
Membre
Dernière intervention
27 novembre 2010

En fait imaginons : une applic avec une textbox et un bouton ok (ou valider)

Maintenant une autre applic (celle-ci) qui doit etre capable d'enclencher le bouton ok sans qu'on clique dessus.

C'est à dire activer un evenement qui clique à la place de la souris.
Messages postés
74
Date d'inscription
lundi 30 juin 2003
Statut
Membre
Dernière intervention
18 octobre 2006
2
Il existe la methode PerformClick() que tu peut utiliser pour declencher un boutton .

Il ne faut pas que tu oublie de le declarer public dans ta Form.



AP
Messages postés
85
Date d'inscription
mardi 23 mars 2004
Statut
Membre
Dernière intervention
27 novembre 2010

En effet, elle est bien sympa la méthode PerformClick et j'y avais pensé... mais il semble qu'elle ne fonctionne qu'à l'intérieur de l'application dans laquelle on l'utilise, or je voudrais qu'elle fonctionne aussi sur une appli externe.
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
46
Je peux me tromper, mais je crois que tu trouveras ton bonheur avec l'API Win32. Et plus précisement (sauf erreur) la méthode SendMessage
Par contre je suis loin d'etre un expert pour cette API, je pourrais pas t'aider.
Croise les doigt pour que Coq (qui est tres fort pour ca) passe dans le coin ^^

Mx
Messages postés
85
Date d'inscription
mardi 23 mars 2004
Statut
Membre
Dernière intervention
27 novembre 2010

"Croise les doigt pour que Coq (qui est tres fort pour ca) passe dans le coin ^^"

En fait c'est exactement ce à quoi je pensais quand je t'ai vu parler d'API :-D
Messages postés
85
Date d'inscription
mardi 23 mars 2004
Statut
Membre
Dernière intervention
27 novembre 2010

Ok merci
Messages postés
85
Date d'inscription
mardi 23 mars 2004
Statut
Membre
Dernière intervention
27 novembre 2010

J'ai regardé sur google, y'a plein de pages sur les handles mais je trouves pas ce que je cherches.

J'ai trouvé les handles des clics souris, des claviers mais pas des boutons ok.

Je continue à chercher mais pour l'instant j'ai pas trop d'idée.
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
A mon avis pour récupérer le handle du bouton et lui envoyer les messages tu dois te baser sur le parcours des controles de ta boite de dialogue et récupérer le handle du controle de classe "Button" avec la légende "OK". (regarde du coté de ma source sur la recup de l'adresse dans la barre d'adresse d'IE, ça devrait t'aider au niveau du parcours childs)
Ensuite tu n'as "plus qu'a" envoyer tes messages de clic :-)

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
46
T'as bien fait de mettre "plus qu'a" entre guillemets ;)

Mx
Messages postés
85
Date d'inscription
mardi 23 mars 2004
Statut
Membre
Dernière intervention
27 novembre 2010

Euh coq, excuse moi de te demander ca, ca a l'air si simple pour toi mais tu pourrais me traduire ton post en francais stp (dsl mais j'y connais rien en api)
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
lol
Je regarde ça de plus prêt chez moi, ce soir ou durant le WE.

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
Question subsidiaire : tu vises une boite de dialogue particuliere ?

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
85
Date d'inscription
mardi 23 mars 2004
Statut
Membre
Dernière intervention
27 novembre 2010

Réponse à la question subsidiaire : Non, je voudrais pouvoir atteindre un bouton OK dans une boite de dialogue quelconque.

J'espère que t'as une solution parce j'ai passé 4h sur les api sans résultat !
Messages postés
85
Date d'inscription
mardi 23 mars 2004
Statut
Membre
Dernière intervention
27 novembre 2010

En fait il faudrait que je puisses accéder au bouton ok d'une autre
application sans intervention autre que celle de mon application.

Si c'est trop compliqué, car les handles diffèrent peut-être selon les
applications (j'en sais rien, je sais toujours pas ce que sont ces fameux handles)
alors, on peut envisager que l'on place la souris sur ce bouton, mais que sans
cliquer, elle active le bouton.

Néanmoins, je garderai cette solution uniquement en dernier recours car la
souris est déjà affectée à une autre tâche : mettre le focus sur une textbox
afin d'y copier une chaîne de caractères.

Merci de m'aider, parce que là, plus je poste de détails, et plus je me dis que
j'y arriverai jamais.
Messages postés
85
Date d'inscription
mardi 23 mars 2004
Statut
Membre
Dernière intervention
27 novembre 2010

Oui mais le problème est que je n'accède pas qu'à des applications c#, ca peut être
n'importe quelle application, donc, dans ce cas, si le handle change à chaque fois,
autant travailler avec la souris et je positionnerai le pointeur au-dessus du bouton.

Il me manque juste la partie de code relative aux API's permettant d'effectuer le
clic sur le bouton.
Messages postés
85
Date d'inscription
mardi 23 mars 2004
Statut
Membre
Dernière intervention
27 novembre 2010

Et il existe pas une portion de code pour récupérer ca... bah non vu que c'est un prog externe !

Et si je veux travailler au clic de la souris, c'est quoi la portion de code pour cliquer sur le bouton ? Si j'avais ca je serai vachement avancé !