Cliquer sur une XTPToolbar avec AutoIT ?

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Jules
Niveau 2
Niveau 2
Messages : 17
Enregistré le : mer. 04 mai 2016 17:00
Status : Hors ligne

Cliquer sur une XTPToolbar avec AutoIT ?

#1

Message par Jules »

Bonjour :) ,
Je suis actuellement en train de développer un script pour automatiser une tâche pour le logiciel ArcMap. Je souhaite donc à un moment cliquer sur le menu "Fichier" dans la barre de tâches du haut. J'ai donc utilisé "AutoIt Window Info" pour obtenir des informations sur le contrôle. Voici le résultat :
>>>> Window <<<<
Title: Sans nom - ArcMap
Class: Afx:002F0000:b:00010005:00000006:04620635
Position: -8, -8
Size: 1696, 1026
Style: 0x17CFC000
ExStyle: 0x00000100
Handle: 0x003D056E

>>>> Control <<<<
Class: XTPToolBar
Instance: 3
ClassnameNN: XTPToolBar3
Name:
Advanced (Class): [CLASS:XTPToolBar; INSTANCE:3]
ID:
Text: Menu principal
Position: 0, 0
Size: 1680, 25
ControlClick Coords: 607, 21
Style: 0x56000100
ExStyle: 0x00000000
Handle: 0x003B032E

>>>> Mouse <<<<
Position: 607, 43
Cursor ID: 0
Color: 0xF4F4F4

>>>> StatusBar <<<<
1: Aucune entité identifiée
2:

>>>> ToolsBar <<<<

>>>> Visible Text <<<<
xtpBarTop
Outils
Mise en page
100%
100%
Menu principal
xtpBarBottom
xtpBarLeft
xtpBarRight





J'ai donc remarqué que la barre de tâches n'était pas un objet de l'API Windows; mais une XTPToolBar... Je ne sais pas bien ce que c'est, même si mes navigations sur les forums tendaient à dire que c'était une barre de tâches customisée.
Le fait est que je ne peux pas cliquer dessus en utilisant "WinMenuSelectItem" ou "ControlClick"... (J'ai essayé et ça ne fonctionne pas).

Je souhaitais donc savoir s'il y existait une solution pour contourner ce problème plutôt embêtant ... Peut-être un UDF ? Ou autre chose ?

Merci d'avance à ceux qui m'aideront :D !
Avatar du membre
TomAijerrie
Niveau 5
Niveau 5
Messages : 192
Enregistré le : lun. 02 juin 2014 09:55
Localisation : Lyon
Status : Hors ligne

Re: Cliquer sur une XTPToolbar avec AutoIT ?

#2

Message par TomAijerrie »

Je souhaite donc à un moment cliquer sur le menu "Fichier" dans la barre de tâches du haut.
Tu voulais dire la barre de menu ?
La barre des taches est la barre généralement en bas de l'écran, où il y a (normalement) un bouton par fenêtre existante, et est entre le bouton du menu démarrer et la zone de notifications (Tray)

Est-ce que une succession de send("...") peut te convenir ?
Il faudrait faire send("{alt}{down}") pour ouvrir le menu fichier (si il est tout à gauche), puis en envoyant la touche accélératrice (lettre soulignée) ou encore des touches fléchées, puis la touche enter, tu peux choisir l'item du menu que tu veux.

Cette solution nécessite que la fenêtre soit visible et activée, et que l'utilisateur ne touche à rien pendant une à deux seconde(s)
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1037
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Cliquer sur une XTPToolbar avec AutoIT ?

#3

Message par walkson »

Bonjour,
vous avez essayé avec Opt("WinTitleMatchMode", 2) ?
Sinon, le logiciel fonctionne peut être en command line ?
Et enfin, il y a peut être aussi des raccourcis (genre CTRL + F) ? (mettre le focus sur la page et envoyer le raccourci)
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Jules
Niveau 2
Niveau 2
Messages : 17
Enregistré le : mer. 04 mai 2016 17:00
Status : Hors ligne

Re: Cliquer sur une XTPToolbar avec AutoIT ?

#4

Message par Jules »

Bonjour,
Merci de vos réponses.
Effectivement, je parlais bien de barre de menu et non de barre de tâches, erreur de ma part ^^.

Sinon, j'ai effectivement essayé avec une succession de combinaisons ALT + F etc... avec la fonction Send(...) et ça fonctionne, à condition bien sûr comme vous dites comme le focus soit sur la fenêtre.

Sinon, je ne connais pas la fonction Opt, à quoi sert-elle ?

Cordialement.
Avatar du membre
TomAijerrie
Niveau 5
Niveau 5
Messages : 192
Enregistré le : lun. 02 juin 2014 09:55
Localisation : Lyon
Status : Hors ligne

Re: Cliquer sur une XTPToolbar avec AutoIT ?

#5

Message par TomAijerrie »

Pour le fonctionnement de la fonction opt() : http://www.autoitscript.fr/autoit3/docs ... Option.htm
Pour activer la fenêtre (au cas où...) : http://www.autoitscript.fr/autoit3/docs ... tivate.htm
Jules
Niveau 2
Niveau 2
Messages : 17
Enregistré le : mer. 04 mai 2016 17:00
Status : Hors ligne

Re: Cliquer sur une XTPToolbar avec AutoIT ?

#6

Message par Jules »

J'ai deux questions :
Quelle serait l'utilité d'utiliser Opt("WinTitleMatchMode", 2) dans ce cas là ?

Et concernant le gain de focus (WinActivate), si une fenêtre est réduite et qu'on lui donne le focus, est-ce qu'elle réapparaît en premier plan où elle reste réduite ?
Avatar du membre
TomAijerrie
Niveau 5
Niveau 5
Messages : 192
Enregistré le : lun. 02 juin 2014 09:55
Localisation : Lyon
Status : Hors ligne

Re: Cliquer sur une XTPToolbar avec AutoIT ?

#7

Message par TomAijerrie »

Utiliser Opt("WinTitleMatchMode", 2) permet d'avoir moins de texte à traiter, et donc d'être plus réactif, mais aussi d'éviter des erreurs en confondant avec d'autres fenêtres ouverte (Scite par exemple, où il y a certainement le nom de la fenêtre écrit dans ton code)

en utilisant WinActivate sur une fenêtre réduite, la fenêtre se restaure et passe au premier plan.
/!\ Si il y a une fenêtre en TopMost (gestionnaire des tâches en mode "toujours visible"...), ta fenêtre reste en dessous de l'autre, la navigation au clavier reste possible (send(...)), mais si tu as besoin de cliquer, et que la zone cliquable est cachée par l'autre fenêtre, alors ta fenêtre ne recevra pas ton clic.
Jules
Niveau 2
Niveau 2
Messages : 17
Enregistré le : mer. 04 mai 2016 17:00
Status : Hors ligne

Re: Cliquer sur une XTPToolbar avec AutoIT ?

#8

Message par Jules »

Merci beaucoup pour vos explications :)

Vu que je souhaiterais faire un petit programme (.exe) que l'utilisateur lance à sa guise, et qu'aucune interaction ne doit être réalisée par l'utilisateur pour ne pas interférer avec l'exécution des commandes AutoIt, je pense désactiver les Inputs user ( BlockInput(...) ) pendant l'exécution du script.
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: Cliquer sur une XTPToolbar avec AutoIT ?

#9

Message par orax »

Il faudrait déjà essayer avec ControlSend au lieu de Send.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Jules
Niveau 2
Niveau 2
Messages : 17
Enregistré le : mer. 04 mai 2016 17:00
Status : Hors ligne

Re: Cliquer sur une XTPToolbar avec AutoIT ?

#10

Message par Jules »

J'ai essayé d'utiliser ControlSend, mais cette fonction requiert un ControlID en paramètre. Or, je voudrais envoyer des touches à la fenêtre et non à un composant particulier (bouton ou autre). Du coup, comment je pourrais faire ? J'ai essayé de passer en ControlID la XTPToolBar mais rien ne s'est passé ...
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1037
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Cliquer sur une XTPToolbar avec AutoIT ?

#11

Message par walkson »

Bonsoir,
Je me suis amusé avec l'aide d'Autoit, si ça peut vous donner des idées

Code : Tout sélectionner

AutoItSetOption("WinTitleMatchMode", 2)
ShellExecute ("hh.exe",  @ProgramFilesDir &"\AutoIt3\AutoIt.chm","","open",@SW_HIDE)
MsgBox(0,"","AutoIt Help caché",2)
WinSetState("AutoIt Help","",@SW_SHOW )
WinSetState("AutoIt Help","",@SW_MINIMIZE )
Sleep(1000)
WinActivate("AutoIt Help","")
WinSetTitle("AutoIt Help","","AUTOIT s'amuse") ;changement du titre
ControlSend("AUTOIT s'amuse","","","!g")  ;par raccourci
Sleep(2000)
For $i = 1 to 4
ControlSend("AUTOIT s'amuse","","","{DOWN}")
Sleep(500)
Next
ControlSend("AUTOIT s'amuse","","","{ENTER}")
ControlSend("AUTOIT s'amuse","","[CLASS:Edit; INSTANCE:1]","Send") ;par un edit
ControlClick("AUTOIT s'amuse","","Button2")
Sleep(500)
ControlSend("AUTOIT s'amuse","","","{TAB}")
Sleep(500)
ControlSend("AUTOIT s'amuse","","","{TAB}")
Sleep(500)
ControlSend("AUTOIT s'amuse","","","{DOWN 45}")
ControlSend("AUTOIT s'amuse","","","{ENTER}")
Sleep(2000)
ControlCommand("AUTOIT s'amuse","","[CLASS:ToolbarWindow32; INSTANCE:1]","SendCommandID", 206)
WinFlash("AUTOIT s'amuse","",8)
WinKill("AUTOIT s'amuse","")
Sleep(2000)
;exemple de command line, un peu plus rapide et sûr
ShellExecute ("hh.exe", "mk:@MSITStore:" & @ProgramFilesDir &"\AutoIt3\AutoIt.chm::/html/functions/ControlCommand.htm")
Il y a aussi le script de Jguinch pour retrouver la liste des contrôles: http://www.autoitscript.fr/forum/viewto ... =6&t=10670 (beaucoup plus bavard que Au3Info)
Et enfin, ce programme semble avoir des command line. Renseignez vous ou regardez l'aide
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Jules
Niveau 2
Niveau 2
Messages : 17
Enregistré le : mer. 04 mai 2016 17:00
Status : Hors ligne

Re: Cliquer sur une XTPToolbar avec AutoIT ?

#12

Message par Jules »

Bonjour,
Le problème est que quand je lance le .exe, les contrôles affichés sont toujours ceux de la fenêtre SciTE (quand je l'exécute depuis SciTE), sinon depuis un Shell, j'ai un message qui me dit "No control found for Invite de commandes". Et en mettant en argument un chemin vers un exe d'un programme (pour que le petit utilitaire affiche les contrôles de ce programme), il ignore cet argument.
Répondre