[Autoit] Communication entre deux programmes

Résolu/Fermé
Casozu - Modifié par Casozu le 15/05/2013 à 22:04
 Casozu - 16 mai 2013 à 17:51
Bonsoir,

Depuis peu j'ai commencé à apprendre la programmation Autoit. Jusqu'à maintenant j'arrivais à résoudre mes problèmes grâce à l'aide et à Mr Google, mais ce n'est plus le cas.

En effet j'aimerais réussir à faire un lien entre deux programmes (un que j'ai fais moi-même et un autre existant) pour que celui que j'ai fait puisse réaliser certaines tâches basiques (clics, texte). Mais mon problème est que ma fenêtre (le programme déjà fait) est en caché, et donc ces fonctions ne fonctionnent plus.

Je fais donc appel à vous pour savoir si vous connaissez un moyen pour communiquer avec une fenêtre cachée ? (via des commandes qui peuvent avoir un effet sur l'autre fenêtre, ou des clics/du texte à envoyer qui fonctionnent même si la fenêtre est cachée).

2 réponses

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
16 mai 2013 à 10:35
Salut Casozu,

Je ne comprend pas très bien en quoi consiste ton "programme déjà fait" dont la "fenêtre" serait "cachée". Si ton programme a une fenêtre "cachée", et que cette fenêtre sert à quelque chose pour l'utilisateur, l'utilisateur doit bien avoir un moyen de la faire "apparaître" pour s'en servir. Utilise le même moyen avec AutoIt.

Ensuite, un des moyens les plus fiables d'intéragir avec une fenêtre avec AutoIt est de récupérer son "Handle" Windows.

Tu le fais avec la fonction AutoIt WinGetHandle.

https://www.autoitscript.com/autoit3/docs/functions/WinGetHandle.htm

Dans l'exemple fournit, WinGetHandle est utilisé avec une recherche de nom de fenêtre précédée de la propriété "CLASS" (qui décrit la "internal window classname"). Si la fenêtre n'a pas de titre, ou que la recherche par titre n'est pas fiable, c'est aussi un bon moyen d'identification. Tu trouves le nom de classe interne de la fenêtre en utilisant le programme AutoIt Window Info, fournit avec AutoIt.

Avec le même outil, tu peux récupérer le nom des contrôles sur lesquels tu veux agir (les boutons, etc.).

Une fois que tu disposes du Handle de la fenêtre, et du nom du contrôle, tu peux utiliser ces informations pour accéder à la fenêtre et ses éléments, que celle-ci soit visible ou pas, qu'elle ait le focus ou pas, dès lors que la fenêtre existe, bien sûr.

https://www.autoitscript.com/autoit3/docs/functions/ControlSend.htm
https://www.autoitscript.com/autoit3/docs/intro/controls.htm


Dal
0
Bonjour Dal,

Merci avant tout pour ta réponse. J'ai utilisé l'outil AutoIt Window Info sur ma fenêtre en question (c'est une .exe), et lorsque je passe la cible sur un bouton de cette fenêtre, je n'ai aucune différence (c'est-à-dire que le handle de ma fenêtre est le même que celui du bouton).

Donc je bloque sur ça. Je ne sais pas si il existe un autre moyen, afin que mon programme puisse intéragir avec la fenêtre (.exe). Je pourrais très bien la démasquer et faire un clic avec la souris, mais ce n'est pas ça que je veux.
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié par [Dal] le 16/05/2013 à 17:51
Si le bouton n'est pas un contrôle standard Windows, tu ne peux pas utiliser cette méthode. Tu devras utilise Send, au lieu de ControlSend.

Il te faudra donc disposer du focus sur la fenêtre, puisque Send ne travaille que sur la fenêtre active, et envoyer un clic de souris, des raccourcis clavier (Alt-touche éventuellement existants sur le bouton) ou des tabulations et entrée dans le pire des cas.

C'est un peu du bricolage :-)


Dal
0
Ah d'accord, merci pour ton aide ^^
0