Abonnieren  Kündigen          
        

Interface Scripting

Es gibt viele Programme, die nicht über AppleScript angesprochen werden können. Ebenso sind viele Aufgaben und Handlungen denkbar, bei denen die mitgelieferten Klassen und Befehle der Programme nicht ausreichend sind und eine passende Scripting Addition nicht verfügbar ist. AppleScript bringt für solche Aufgaben die Möglichkeit mit, die grafische Oberfläche selbst zu steuern, Menüpunkte auszuwählen, Elemente anzuklicken und zum Teil auch Text einzugeben. Das Verfahren wird von Apple unter dem Begriff »Interface Scripting« zusammen gefasst.

Die Aktivierung des Zugriffs für Hilfsgeräte muss aktiviert werden.

Das Interface Scripting benötigt die Uterstützung für Hilfsgeräte. Hierzu wird in den Systemeinstellungen im Bereich Bedienungshilfen die Option Zugriff für Hilfsgeräte aktivieren ausgewählt.

Die notwendigen Funktionen innerhalb von AppleScript werden von der Process Suite der Erweiterung System Events bereit gestellt. Es wird, anders als bei der Ansprache der Funktionen eines Programms, nicht das Programm (tell application) sondern der aktive Prozess (tell process) angesprochen und gesteuert. Zusätzlich muss mit Hilfe des Programms UI Element Inspector (Download) die Bezeichnung und die Hierarchie des anzusprechenden Objektes ermittelt werden. (Eine leistungsfähige und kostenpflichtige Alternative zu dem eher rudimentären UI Element Inspector besteht in dem Programm UI Browser von PreFab.)

UI Element Inspector

Wird der Inspector gestartet, dann erscheint ein schwebendes Fenster. In diesem findet sich im ersten Absatz die Hierarchie des Elements, über dem sich der Mauspfeil gerade befindet. Zu den Informationen gehören das aktive Programm (AXApplication), das entsprechende Fenster (AXWindow) und möglicherweise die Symbolleiste und der Name der Schaltfläche.

Der UI Element Inspector gibt die Bezeichnung und die Hierarchie der Elemente der grafischen Oberfläche in einem schwebenden Fenster wieder.

Die Anzeige im Inspector kann mit der Tastenkombination Apfel + F10 eingefroren werden. Der Text wird nun rot angezeigt und es erscheint untenstehendes Fenster. Wenn Sie hier die Option Highlight aktivieren, dann wird das angezeigt Element der grafischen Benutzeroberfläche rot hervorgehoben. Der Text kann nun markiert und über die Zwischenablage in den Skripteditor eingefügt werden.

Mit der Tastenkombination Apfel + F10 kann die Anzeige eingefroren werden.

Ein erstes Beispiel

In einem ersten Beispiel soll im Browser Camino ein Mausklick auf den Menüpunkt AbageNeues Fenster ausgelöst werden. Die Hierarchie und Bezeichnung dieses Menüpunktes wird ermittelt, indem dieser mit der Maus ausgewählt wird. Im Inspector erscheint nun die Anzeige

<AXApplication: “Camino”>
<AXMenuBar>
<AXMenuBarItem: “Ablage”>
<AXMenu>
<AXMenuItem: “Neues Fenster”>

Dieser Text muss nun im Skripteditor angepasst werden. Dazu sind die Klammern, die Doppelpunkt und die Zeichen AX zu löschen. Ferner sind die »schönen« Anführungszeichen durch einfache Anführungszeichen " (Umschalt + 2) zu ersetzen. Als dritter und letzter Schritt müssen die Bezeichnungen wie MenuBarItem durch jeweils ein Leerzeichen vor dem Großbuchstaben getrennt (Menu Bar Item) werden. Damit ist das Grundgerüst für ein Skript, das einen Mausklick auf den Menüpunkt Neues Fenster simuliert, vorhanden.

tell application "Camino" to activate
tell application "System Events"
    tell process "Camino"
        tell menu bar 1
            tell menu bar item "Ablage"
                tell menu 1
                    click menu item "Neues Fenster"
                end tell
            end tell
        end tell
    end tell
end tell

In dem Skript selbst wird zunächst das Programm Camino mit activate in den Vordergrund geholt. Dann wird die Scripting Addition System Events, die die notwendigen Befehle für das Interface Scripting beinhaltet, angesprochen. Mit tell process "Camino" werden die in der Process Suite enthaltenen Befehle und Objekte auf den aktuellen Prozess mit der Bezeichnung Camino angewandt. Die einzelnen Elemente der grafischen Oberfläche, deren Hierarchie zuvor mit dem Inspector ermittelt wurde, werden nun der Reihe nach mit tell-Blöcken angesprochen. Bei Elementen, die im Inspector nicht mit einem Namen versehen wurden, wird mit einer Zahl für die Identifikation gesorgt. Dies ist zum Beispiel bei menu bar der Fall. Mit menu bar 1 wird hier die erste Menüzeile ausgewählt. (Es gibt in diesem Fall auch nur eine.) Am Ende der Hierarchie angelangt, wird innerhalb des tell-Blocks der auszuführende Befehl angegeben. In diesem Fall ist es click zur Simulation eines Mausklicks auf das Element Neues Fenster.

Die Systemeinstellungen durchklicken

In einem zweiten Beispiel soll in den Systemeinstellungen im Bereich Sharing der Gerätename geändert werden. Ferner soll überprüft werden, ob die Firewall aktiv ist. Wenn die Firewall abgeschaltet wurde, dann wird sie von dem Skript aktiviert. Das Skript besteht aus drei wesentlichen Elementen, nachdem das Programm System Preferences, also die Systemeinstellungen, aktiviert wurden. Zuerst wird der Bereich Sharing angeklickt und, wenn dieser erschienen ist, an zwei Stellen der Name des Rechners in MrsBrain geändert. Dann wird der Reiter Firewall ausgewählt. In dieser Ansicht wird überprüft, ob die Schaltfläche zum De-/Aktivieren der Firewall dem Wert Stop entspricht. Wenn dies der Fall ist, soll die Schaltfläche angeklickt und die Firewall aktiviert werden. Hat die Schaltfläche den Wert Start, dann soll kein Klick erfolgen, denn dieser würde die Firewall abschalten.

tell application "System Preferences" to activate
tell application "System Events"
    tell process "System Preferences"
        tell window "Systemeinstellungen"
            tell scroll area 1
                tell button "Sharing" to click
            end tell
        end tell
        delay 1
        tell window "Sharing"
            -- Geraetename aendern
            tell text field 1
                set value to "MrsBrain"
            end tell
            -- Bonjour Name aendern
            tell button "Bearbeiten…"
                click
            end tell
            tell sheet 1
                tell text field 1
                    keystroke "a" using command down
                    keystroke "MrsBrain"
                end tell
            end tell
            tell sheet 1
                tell button "OK"
                    click
                end tell
            end tell
            delay 1
            -- Firewall einschalten
            tell tab group 1
                tell radio button 2
                    click
                end tell
                set FWStatus to title of button 3
                if FWStatus is "Start" then
                    tell button 3
                        click
                    end tell
                end if
            end tell
        end tell
    end tell
end tell
delay 1
tell application "System Preferences" to quit

Im ersten Schritt wird mit dem Block tell window "Systemeinstellungen" [...] end tell im Fenster Systemeinstellungen auf die Schaltfläche Sharing geklickt.1 Da die Systemeinstellungen bei einem Wechsel der Ansichten diese Überblenden, der ausgewählte Bereich also nicht unmittelbar sondern mit einer kleinen Verzögerung zur Verfügung steht, pausiert das Skript mit der Anweisung delay 1 eine Sekunde. Der Name des Fensters hat sich nun in Sharing geändert. Dies macht einen neuen tell window "Sharing"-Block notwendig, der die Elemente innerhalb des umbenannten Fensters anspricht.

Werte vorgeben

In diesem Block können dann die gewünschten Änderungen vorgenommen werden. Zuerst wird mit tell text field 1 set value to "MrsBrain" end tell
der Wert des Textfeldes mit dem Namen des Rechners in MrsBrain geändert. Dass hier mit dem Befehl set wie auch bei Variablen und Eigenschaften gearbeitet werden kann hat seinen Grund darin, dass die Werte der Elemente der grafischen Oberfläche sowohl ausgelesen als auch gesetzt werden können. Die Werte und Eigenschaften werden im Inspector unterhalb der Hierarchie im Bereich Attributes angezeigt. Es wäre zwar theoretisch auch möglich, hier wie im nächsten Beispiel mit dem Befehl keystroke zu arbeiten und eine direkte Eingabe über die Tastatur zu simulieren. In diesem Beispiel führt dies aber zu einem Konflikt mit dem Suchfeld rechts oben in den Systemeinstellungen, denn auch dieses würde über text field 1 angesprochen und in den Standardeinstellungen befindet sich der Cursor innerhalb dieses Feldes, das die Eingaben entgegen nehmen würde.

Tastatureingaben simulieren

Dann wird mit tell button "Bearbeiten…" click ein Mausklick auf die Schaltfläche Bearbeiten simuliert. Dieser hat zur Folge, dass ein Ausklappmenü (sheet) erscheint. In diesem kann der Name, unter dem der Rechner im Netzwerk erscheint, geändert werden. Innerhalb der Schaltfläche ist ein Textfeld (text field 1) vorhanden. In diesem werden mit dem Befehl keystroke zwei Tastatureingaben vorgenommen. Die erste Eingabe mit keystroke "a" using command down besteht darin, die Tastenkombination Apfel + A zu simulieren. Der Befehl keystroke nimmt zunächst eine Zeichenkette entgegen. Mit Hilfe von using kann ferner eine Tastenkombination erreicht werden. Die Anweisung using command down besagt, dass die Apfel-Taste gedrückt gehalten wird. Es ist auch möglich, mit control down die ctrl-Taste, mit optioin down die Alt-Taste und mit shift down die Umschalt-Taste zu simulieren. Der nun vollständig selektierte Text wird mit keystroke "a" using command down überschrieben. Auf die Eingabe erfolgt mit tell button "OK" click ein Mausklick auf die Schaltfläche OK in dem Ausklappmenü. Der Name des Rechners im Netzwerk wurde nun in MrsBrain geändert.

Werte auslesen und überprüfen

Zur Überprüfung und gegebenenfalls Aktivierung der Firewall muss zunächst die passende Ansicht ausgewählt werden. Dies erfolgt mit einem Mausklick auf den Eintrag Firewall (radio button 2) im Reiter (tab group 1). Ist die Ansicht der Firewall nun verfügbar, wird der Wert der Schaltfläche, die zum de-/aktivieren dient, mit set FWStatus to title of button 3 ausgelesen. Wenn der Wert der Variable FWStatus »Start« entspricht ( if FWStatus is "Start" then), soll die Schaltfläche angeklickt werden. Andernfalls soll kein Mausklick erfolgen.

Nachdem nun alle Arbeiten erledigt wurden, wartet das Skript noch eine Sekunde und beendet dann das Programm Systemeinstellungen.

Einige Hilfsmittel

Ein simples, aber vergleichsweise nützliches Hilfsmittel kann der Befehl get UI elements darstellen. Wird er innerhalb eines tell-Blocks angewandt, so werden alle Elemente ausgegeben. Hierbei wird die Hierarchie beachtet und die Elemente, die eine Ebene tiefer liegen, werden nicht ausgegeben. Mit dem Aufruf

tell application "Process" to activate
tell application "System Events"
    tell process "Process"
        tell window "Mac-Webseite"
            get UI elements
        end tell
    end tell
end tell

werden die Elemente ausgegeben, die sich im Fenster Mac-Webseite befinden. Würde der Befehl get UI Elements nicht auf das Fenster sondern direkt auf den Prozess angewandt, dann würde das Fenster als ein ansprechbares Element aufgeführt, die Elemente innerhalb des Fensters werden nicht ausgegeben.

Mit dem Befehl get UI Elements können die Elemente der grafischen Oberfläche ausgelesen werden.

Die Eigenschaften und Werte eines Elements können mit get properties ausgelesen werden.

Insbesondere in Verbindung mit Abfragen kann es manchmal notwendig sein, die Eigenschaften eines Elements abzufragen. Dies kann wie im obigen Bild mit dem Befehl get properties of erfolgen. Zu den Eigenschaften gehört unter anderem der Name, die X- und Y-Koordinate auf dem Bildschirm sowie der aktuelle Wert. Die Eigenschaften sind abhängig von der Art des abgefragten Elements. Details der zur Verfügung stehenden Eigenschaften können in der Process Suite der System Events in der Bibliothek eingesehen werden.

1Es wäre an dieser Stelle auch möglich, auf die AppleScript-Fähigkeiten der Systemeinstellungen direkt zurück zu greifen und hier das Objekt pane zu verwenden.

Kontakt | Impressum | © Kai Surendorf

Benutzeranmeldung

Shout Box

Kai Surendorf:

Inhaltsverzeichnis des Handbuchs ist online

Kai Surendorf:

Leseprobe vom Handbuch online

Kai Surendorf:

Installationsanleitung zum CalendarServer überarbeitet

Anmelden oder Registrieren um zu shouten.
Alle Shouts

RSS-Feeds

 
Die Episoden des Podcast zum Abonnement 

In dieser Rubrik finden Sie eine Übersicht der Publikationen inklusive Inhaltsverzeichnis, Leseprobe und Pressestimmen.

Unter <opencontent> finden Sie eine Reihe von längeren Texten, die sich einigen Themen detaillierter widmen.

Die StickyBits sind das etwas unregelmäßig erscheinende Webzine auf mac.delta-c

Die regelmäßig aktualisierten Notizen verlinken kurz und knapp auf neue Programme, Tools, Artikel und Tutorials.

Unregelmäßig erscheinen neue Folgen im Screencast.

Im Podcast finden Sie launige, rein subjektive Kommentare zum Geschehen rund um Apple.

In dieser Rubrik finden Sie meine Meinung über Freeware, Shareware und kommerzielle Programme und weitere Produkte.

Das Forum ist ein Angebot, sich über die Publikationen im Speziellen und Mac OS X in all seinen Facetten generell auszutauschen.