macfidelity

|

rethinking the think-different thing

mac | AppleScript und GUI Scripting

April 1st, 2009 at 11:44

20090401_gui_scripting_06

AppleScript ist ne schöne Sache soviel steht außer Frage, jedoch muss man in speziellen Fällen Umwege gehn.

Was tun, wenn man ein Problem mit AppleScript lösen will, das entsprechende Programm aber nicht oder nur teilweise scriptbar ist ?

In solch einem Fall stellt GUI Scripting eine der letzten Möglichkeiten dar, weshalb ich im folgenden auch in wenigen Worten erklären will worum es dabei geht.

Voraussetzung

Ab Werk ist die notwendige Option im Betriebssystem Mac OS X erstmal deaktiviert, d.h. ihr könntet noch so dolle Scriptereien versuchen … GUI Scripting wird nur funktionieren wenn ihr folgende Vorbedingung erfüllt:

Enable access for assistive devices

muss aktiviert sein.

Aber wo findet man diese Option überhaupt ?

Step by Step

Also via SystemEinstellungen (aka System Preferences) den Punkt Universal Access ausfindig machen. Ich nehme da immer gerne das Suchfeld oben rechts in Anspruch, zumindest wenn ich mir mal nicht so sicher bin wo sich etwas von mir gesuchtes befindet.

20090401_gui_scripting_01

Dort aktiviert ihr dann den zweitletzten Punkt

20090401_gui_scripting_02

Ok damit sind die Vorraussetzungen erfüllt, dann wollen wir doch mal testen was da so geht.

Anwendungsbeispiel

Wie wäre es den mit nem einfachen Selbsttest. Wir wollen via AppleScript testen ob diese gerade eben getätigte Einstellung noch aktiv ist oder nicht.

Wie der eine oder andere sicherlich beim scripten schon festgesteltl hat, sind Teile der SystemEinstellungen leider nicht komplett mit normalem AppleScript ansprechbar …. und voila wir sind wieder beim Thema GUI Scripting ;)

Folgender Code prüft ob die Einstellung erfüllt ist, ist dies nicht der Fall öffnet sich die System-Einstellungen, es wird Universal Access angewählt und anschließend werdet ihr mit einem Dialog darauf hingewiesen dass ihr den Status unten ändern könnt.

20090401_gui_scripting_03

Soweit so gut …. vielleicht sollten wir das noch minimal ausbauen. Wie wäre es den damit den Anzeigemodus von Farbe auf Graustufen zu wechseln ?

Nachdem wir dank obigem Code wissen dass die Vorrausetzungen erfüllt sind könnte man also in etwa sowas ergänzend einbinden

20090401_gui_scripting_04

Graustufen / grayscale ?

20090401_gui_scripting_05

Na klar – zumindest für meine Augen ist das manchmal sogar sehr entspannend. Ich würds ja mal ausprobieren ;)

Ein Hinweis ist absolut noch von Nöten:

Es kann zu Ungereimtheiten kommen wen man Einstellungen einerseits per Script ändert, aber gleichzeitig auch die entsprechende GUI offen hat die den Status anzeigt. Öffnet ihr also die Systemeinstellungen und seht das obiges Setting nicht aktiviert ist und ändert den Status via einem zweiten Script, wird die UI dieses mit hoher Wahrscheinlichkeit nicht gleich korrekt anzeigen.

Fazit

GUI-Scripting ist dann eine willkommene Ergänzung wenn man mit anderen Mitteln nicht mehr weiterkommt – es ist aber auch ganz klar: fernab von optimal.

Wollt ihr ein Problem umbedingt Script-basierend lösen viel Spaß damit, aber seit euch sicher das dieser Ansatz weder schön noch in den meisten Fällen problemslos funktioniert.

Ich hoffe der Beitrag konnte die Möglichkeiten im kleinen aufzeigen – wer tiefer rein will wird wohl nicht um Lektüre drumrumkommen ;)

via

Tags: , , ,

2 Responses to “mac | AppleScript und GUI Scripting”

  1. Patrick Says:

    GUI Scripting ist ne feine Sache. Was micht dabei stört ist, das wieder ein Dienst mehr im Hintergrund läuft. Probiere gerade über Carbon/Cocoa Schnittstellen und Access API meinen Tiling Window Manager zum laufen zu bekommen :)

    http://stackoverflow.com/questions/614185/window-move-and-resize-apis-in-os-x

    ReplyReply
  2. fidel Says:

    bin ja mal echt gespannt was da rauskommt … ich meld mich schonmal als Tester an =)

    ReplyReply

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>