AppleScript peut voir à peu près tout le UI elements
via Événements du système Mais pour obtenir des éléments sous une forme gérable, au lieu de tout jeter dans une boîte, il faut vraiment parcourir la hiérarchie de l'élément ou des éléments souhaités. Par exemple, il peut y avoir plusieurs objets (tels que splitter group
, scroll area
etc.) dans une fenêtre d'application, mais ceux-ci peuvent contenir chacun d'autres éléments, qui peuvent contenir d'autres éléments.....
C'est l'une des raisons pour lesquelles les scripts GUI sont si problématiques. Vous devez connaître la hiérarchie spécifique de l'élément ou du contrôle, mais cela peut changer en fonction de la version de l'application et de la disposition particulière à un moment donné, il est donc utile de savoir comment il a été trouvé en premier lieu.
Pour explorer la hiérarchie de l'interface utilisateur, Xcode comprend un Accessibility Inspector
mais elle peut également être effectuée manuellement dans l'application scriptÉditeur où les références des objets peuvent être visualisées dans la fenêtre Log. Pour un exemple, commençons par les éléments de l'interface utilisateur d'une fenêtre d'application, ici la fenêtre frontale en Terminal v2.11 (Big Sur) :
tell application "System Events" -- peek into the rabbit hole
tell application process "Terminal" to tell window 1
set elements to its UI elements -- get elements at the current location
if elements is {} then -- no more
return its value
else
return elements
end if
end tell
end tell
Ensuite, si des éléments apparaissent dans les résultats, choisissez-en un et ajoutez-le à l'instruction tell pour obtenir ses éléments d'interface utilisateur, et ainsi de suite, jusqu'à ce que vous arriviez au contrôle qui vous intéresse. Dans la continuité de l'exemple précédent (l'instruction ¬
est un symbole de continuation de ligne provenant de l'utilisation de option-return
(ou option-l
) pour essayer de garder un formatage raisonnable) :
tell application "System Events" -- kick the rabbit out
tell application process "Terminal" to tell window 1 ¬
to tell splitter group 1 ¬
to tell scroll area 1 ¬
to tell text area 1
set elements to its UI elements -- get elements at the current location
if elements is {} then -- no more
return its value
else
return elements
end if
end tell
end tell
La référence finale de l'objet pour ce qui précède serait quelque chose comme text area 1 of scroll area 1 of splitter group 1 of window 1 of application process "Terminal"
qui peut être copié depuis la fenêtre d'événement de l'éditeur script pour être utilisé ou conservé.