Fischer-Bayern.de
Letztes Update: 12.01.2005 | 1:00:48 Uhr
Geht nicht, gibt's nicht 
Peter Fischer


Es ist bestimmt schon vorgekommen, dass Sie eine Aufgabe automatisieren wollten, nur um dann feststellen zu müssen, dass das entsprechende Programm keine AppleScript-Unterstützung bietet.

Das muss noch lange nicht heißen, dass es nicht doch machbar ist. Ich möchte das hier am Beispiel des Kontrollfelds "Datum & Uhrzeit" einmal demonstrieren.

Da das Kontrollfeld nicht per AppleScript zu öffnen ist, muss dies der Finder übernehmen. Das sollte kein größeres Problem darstellen. Schließlich ist dies genau der Weg, den Sie auch einschlagen, wenn Sie eine Änderung im Kontrollfeld von Hand vornehmen. Vielleicht ahnen Sie jetzt schon worauf es bei unserem Skript hinausläuft - ein Makro.

Wir werden einfach versuchen, die Aktionen, die wir sonst am Bildschirm ausführen im Skript nachzubilden.

Zuerst legen wir den Pfad zum Kontrollfeld fest:

set KF_Pfad to ((path to control panels folder) as string) ¬
     & "Datum & Uhrzeit"
Jetzt könnten wir den Finder bereits anweisen, das Kontrollfeld zu öffnen. Im folgenden Skript werden wir das Datum abändern. Ich habe zur Demonstration einen Abfragedialog eingebaut, in dem das gewünschte Datum eingetragen werden muss. Das widerspricht zwar dem Automatisierungsgedanken, da man das Datum dann ja genau so gut gleich im Kontrollfeld eintragen könnte, aber es soll ja nur ein Beispiel sein. Man könnte schließlich im Skript selbst ein bestimmtes Datum vorgeben oder das aktuelle Datum mit current date abfragen und dann z.B. einen Monat abziehen oder hinzuzählen. Wie man auf die einzelnen Datumsbestandteile zugreift erfahren Sie aus den Artikeln "Datum formatieren 1 & 2".

set Datum to text returned of (display dialog ¬
     "Geben Sie das Datum im Format TT.MM.JJJJ ein." buttons {"OK"} ¬
     default button "OK" default answer "")
Jetzt benötigen wir die einzelnen Bestandteile des eingegebenen Datums:
try
     set derTag to (text items 1 thru 2 of Datum) as string
     set Monat to (text items 4 thru 5 of Datum) as string
     set Jahr to (text items 7 thru 10 of Datum) as string
on error
     display dialog "Das eingegebene Datum war nicht richtig formatiert"  
     return
end try        
Jetzt haben wir alle Daten, die wir benötigen. Die Frage ist nur, wie bekommen wir die Daten ins Kontrollfeld. Hier kommt eine Scripting Addition ins Spiel, die eine Texteingabe vornehmen kann. Ich habe "Sändi's Additions" benutzt.

Hier nun das Skript:
set KF_Pfad to ((path to control panels folder) as string) ¬
     & "Datum & Uhrzeit"
set Datum to text returned of (display dialog ¬
     "Geben Sie das Datum im Format TT.MM.JJJJ ein." buttons {"OK"} ¬
     default button "OK" default answer "")
try
     set derTag to (text items 1 thru 2 of Datum) as string
     set Monat to (text items 4 thru 5 of Datum) as string
     set Jahr to (text items 7 thru 10 of Datum) as string
on error
     display dialog "Das eingegebene Datum war nicht richtig formatiert"  
     return
end try

tell application "Finder" 
     open alias KF_Pfad
end tell

TypeText tab
TypeText derTag
TypeText tab
TypeText Monat
TypeText tab
TypeText Jahr

TypeText "w" with Command        
Mit der Tabulatortaste springen wir zu Tag, Monat und Jahr. Nach der Eingabe muss das Kontrollfeld wieder geschlossen werden. Dies funktioniert nicht mit close alias KF_Pfad. Wenn wir die Aktion von Hand ausführen klicken wir entweder in das Schließfeld, wählen "Schließen" aus dem Ablage-Menü oder drücken die Tastenkombination Befehlstaste-W.

Die Tastenkombination habe ich in der letzten Skriptzeile simuliert.

Nun das war doch gar nicht so schwer. Wir bleiben beim Kontrollfeld "Datum & Uhrzeit". Im nächsten Beispiel werden wir die Uhrzeit manuell mit einem Time-Server abgleichen. Dazu muss auf den Button "Server-Optionen..." geklickt werden. Im darauf folgenden Fenster benötigen wir einen Klick auf den Button "Uhr jetzt stellen" und dann die Bestätigung mit dem "OK"-Button. Am Ende wird das Kontrollfeld wieder geschlossen.

Hier werden die Nachteile der "Makro-Methode" wesentlich deutlicher. Im vorherigen Skript bestand eigentlich nur die Schwierigkeit, das Kontrollfeld wieder zu schließen. Das kommt daher, dass das geöffnete Fenster des Kontrollfelds kein Objekt des Finders ist. Der Finder kann deshalb auch nicht darauf zugreifen. Für die folgende Aufgabe müssen wir Mausklicks auf bestimmte Buttons ausführen. Auch das ist mit "Sändi's Additions" kein Problem. Die entsprechenden Positionen, an denen geklickt werden soll, lassen sich mit dem Skript "Mouse 1.3" von Jon Rethorst einfach ermitteln. Da diese Positionen im Skript eingegeben werden, kann das Skript natürlich nur seine Aufgabe erfüllen, solange das entsprechende Fenster nicht verschoben wird. Ein weiterer Nachteil ist, dass wir nicht überprüfen können, ob die Option "Time-Server verwenden" angekreuzt ist. Das ist aber Voraussetzung, damit der Button "Server-Optionen..." überhaupt aktiviert wird. Für dieses Skript muss also selbst dafür gesorgt werden, dass die Voraussetzungen stimmen.

Hier nun das Skript:
set KF_Pfad to ((path to control panels folder) as string) ¬
     & "Datum & Uhrzeit"
tell application "Finder" 
     open alias KF_Pfad
end tell

delay 1
MouseClick At {608,372}
delay 1
MouseClick At {435,335}
delay 1
MouseClick At {631,325}

TypeText "w" with Command

Damit die Mausklicks nicht ins Leere gehen bzw. im falschen Fenster stattfinden, habe ich vorher jeweils eine Pause von 1 Sekunde eingefügt. Sie sehen, es ist eine recht unsichere Sache. Jedoch immer noch besser als gar keine Möglichkeit eine solche Aktion zu skripten.



 

 

Workshop



snow@fischer-bayern.de

Ebene 1