GUI-Scripting innerhalb von RagTime?

Guten Tag Allerseits,

Ich arbeite mit Mac OS X Version 10.5.6 und RagTime 6.0.2 (Build 1632)
sowie RagTime 6.5.0 (Build 1812) auf einem MacBook Pro

und habe 'mal wieder ein AppleScript-Problem.

Um das Setzen eines Links von einem RT-Dokument aus
auf ein anderes Dokument auf meinem Rechner etwas zu entnerven,
habe ich folgendes AppleScript geschrieben,
das sowohl mit RT 6 also mit RT 6.5 funktioniert,
wenn man es vom Skripteditor aus laufen lässt:

tell application "RagTime 6"
activate
tell application "System Events"
tell process "RagTime" -- Beginn von GUI-Scripting
click menu item "Als Verknüpfung markieren" of menu 1 of menu bar
item "Extras" of menu bar 1
delay 0.5 -- kann man u. U. auch weglassen
click radio button "URL" of window "Textinformation"
delay 0.5 -- kann man u. U. auch weglassen
keystroke " " -- Tabulatortaste
end tell
end tell
set theLink to POSIX path of file ((choose file) as text)
set theLink to "file://" & theLink
set selection to theLink
tell application "System Events"
tell process "RagTime"
click button "OK" of window "Textinformation"
end tell
end tell
end tell

Sowohl von RT 6 als auch von RT 6.5 aus gestartet,
passiert zunächst einmal nichts,
und nach ca. fünf Sekunden erscheint von RagTime aus
folgende Fehlermeldung:
„System Events“ hat einen Fehler erhalten:
„menu bar 1 of process "RagTime"“ kann nicht gelesen werden.
Ungültiger Index.

Klickt man jetzt auf den Knopf "Bearbeiten",
erscheint einen Markierung der Zeile:
"click menu item "Als Verknüpfung markieren" of menu 1 of menu bar
item "Extras" of menu bar 1".

Ich habe jetzt das Script, das mir Detlef Schulz geschickt hat,
um den PDF-Export über den Destiller zu erleichtern,
versucht von RT aus laufen zu lassen - aber auch vergeblich.

Zur Erinnerung:

activate application "RagTime 6"
tell application "System Events"
tell process "RagTime"
-- Menü Ablage/Exportieren aufrufen
click menu item "PDF exportieren…" of menu 1 of menu bar item
"Ablage" of menu bar 1
usw.

Auch hier bei der Zeile "click menu item ..." dieselbe Reaktion.

Ich hatte das bisher nicht bemerkt, weil dieses Script immer von
QuicKeys aus gestartet wird - also außerhalb von RT.

Kann es sein, dass GUI-Scripting nicht von RT aus funktioniert?
Oder ist dies noch ein Fehler, der nur bei mir auftritt?

Gruß
Lutz

Re: GUI-Scripting innerhalb von RagTime?

#8416 On 22 Februar, 2009 22:04 Norbert Lindenthal said,

Was ich auch probiere, es führt zur selben Fehlermeldung. Aber aus
dem Skripteditor läufts.
NL

Re: GUI-Scripting innerhalb von RagTime?

#8417 On 23 Februar, 2009 10:07 djschulz said,

Hallo,

GUI-Scripting funtkioniert tatsächlich nicht direkt aus RagTime. Die Welt von RagTime sieht wohl von innerhalb anders aus als von außerhalb.

Aber mit einem kleinen Trick geht es doch:
Das Skript außerhalb RagTimes mit dem Skripteditor als Programm absichern (ohne Startbildschim oder andere Optionen), zum Beispiel als "Hyper.app" auf dem Schreibtisch.
In RagTime dann ein Skript anlegen und dieses Programm auf eine der folgenden Arten aufrufen:

tell application "System Events" to open "/Users/Detlef/Desktop/Hyper.app"

oder mit path to den Pfad zusammenbauen:

tell application "System Events" to open POSIX path of (path to desktop folder) & "/Hyper.app"

Damit wird das Skript von innerhalb RagTimes gestartet aber von außerhalb ausgeführt.

Gruß,
Detlef

P.S.:
Das Skript selbst braucht bei mir drei Tabs um zu funktionieren, da sich der Wert des URL-Feldes leider nicht direkt setzen lässt:

tell application "RagTime 6.5"
activate
tell application "System Events"
tell process "RagTime" -- Beginn von GUI-Scripting
click menu item "Als Verknüpfung markieren" of menu 1 of menu bar item "Extras" of menu bar 1
delay 0.5 -- kann man u. U. auch weglassen
click radio button "URL" of window "Textinformation"
delay 0.5 -- kann man u. U. auch weglassen
--click UI element 5 of window "Textinformation"
keystroke tab -- Tabulatortaste
keystroke tab
keystroke tab
end tell
end tell
set theLink to POSIX path of file ((choose file) as text)
set theLink to "file:/" & theLink
set selection to theLink
tell application "System Events"
tell process "RagTime"
click button "OK" of window "Textinformation"
end tell
end tell
end tell

P.P.S.: AppleScript in RagTime läuft bei mir wieder seit der Aufräumaktion und der neuen 6.5 beta von RagTime.

Re: GUI-Scripting innerhalb von RagTime?

#8418 On 23 Februar, 2009 15:34 Lutz-Dieter Bornemann said,

Am 23.02.2009 um 10:11 schrieb djschulz:

> Hallo,
>
> GUI-Scripting funtkioniert tatsächlich nicht direkt aus RagTime. Die
> Welt von RagTime sieht wohl von innerhalb anders aus als von
> außerhalb.
>
Hallo Detlef,

vielen Dank für den Hinweis. Er erspart viel Herumprobieren.
> Aber mit einem kleinen Trick geht es doch:
> Das Skript außerhalb RagTimes mit dem Skripteditor als Programm
> absichern (ohne Startbildschim oder andere Optionen), zum Beispiel
> als "Hyper.app" auf dem Schreibtisch.
> In RagTime dann ein Skript anlegen und dieses Programm auf eine der
> folgenden Arten aufrufen:
>
> tell application "System Events" to open "/Users/Detlef/Desktop/
> Hyper.app"
>
> oder mit path to den Pfad zusammenbauen:
>
> tell application "System Events" to open POSIX path of (path to
> desktop folder) & "/Hyper.app"
>
> Damit wird das Skript von innerhalb RagTimes gestartet aber von
> außerhalb ausgeführt.
>
Vielen Dank auch für diesen Trick.
> Gruß,
> Detlef
>
> P.S.:
> Das Skript selbst braucht bei mir drei Tabs um zu funktionieren, da
> sich der Wert des URL-Feldes leider nicht direkt setzen lässt:
>
Nach dem Klick auf den URL-Knopf reicht bei mir 1 "keystroke tab", um
den Cursor in das URL-Feld zu setzen.
> tell application "RagTime 6.5"
> activate
> tell application "System Events"
> tell process "RagTime" -- Beginn von GUI-Scripting
> click menu item "Als Verknüpfung markieren" of menu 1 of menu bar
> item "Extras" of menu bar 1
> delay 0.5 -- kann man u. U. auch weglassen
>
Ich habe hier "keystroke "H" eingefügt
> click radio button "URL" of window "Textinformation"
>
Habe ich in "window 1" geändert,
damit das Script auch im Zusammenhang mit Rechenblättern und
grafischem Text funktioniert.
(Für Letztere ist übrigens die Zeile "keystroke "H" erforderlich)
> delay 0.5 -- kann man u. U. auch weglassen
> --click UI element 5 of window "Textinformation"
> keystroke tab -- Tabulatortaste
>
Statt "keystroke " "" - habe ich heute morgen in Deinem Buch
"AppleScript – Der automatische Mac" gelesen.
(Ich finde es gut.)
> keystroke tab
> keystroke tab
>
Diese beiden Zeilen sind bei mir nicht erforderlich.
>
> end tell
> end tell
> set theLink to POSIX path of file ((choose file) as text)
> set theLink to "file:/" & theLink
>
Bei mir sind zwei Schrägstriche erforderlich - also "file://" ...
Sonst versucht RT, einen Browser zu öffnen.
> set selection to theLink
> tell application "System Events"
> tell process "RagTime"
> click button "OK" of window "Textinformation"
> end tell
> end tell
> end tell
>
> P.P.S.: AppleScript in RagTime läuft bei mir wieder seit der
> Aufräumaktion und der neuen 6.5 beta von RagTime.
>
Das freut mich für Dich.

Hier die aktuelle Fassung meines Scripts:
Ich habe noch eine Routine vorgeschaltet, die sicherstellen soll,
dass der Benutzer zuvor auch die Linkstelle markierte hat.

tell application "RagTime 6"
activate
try
if length of (selection as text) < 2 then
error
end if
on error
display dialog "Markieren Sie zuvor mindestens 2 Zeichen!" with icon
0 buttons {"Weiter"} default button 1 cancel button 1
end try
tell application "System Events" -- Beginn von GUI-Scripting
tell process "RagTime"
click menu item "Als Verknüpfung markieren" of menu 1 of menu bar
item "Extras" of menu bar 1
delay 0.2 -- kann man u. U. auch weglassen
keystroke "H"
click radio button "URL" of window 1
delay 0.2 -- kann man u. U. auch weglassen
keystroke tab -- Tabulatortaste
end tell
end tell -- Ende von GUI-Scripting
set theLink to POSIX path of file ((choose file) as text)
set theLink to "file://" & theLink
set selection to theLink
tell application "System Events" -- Beginn von GUI-Scripting
tell process "RagTime"
click button "OK" of window 1
end tell
end tell -- Ende von GUI-Scripting
end tell

Vielen Dank noch einmal
Gruß
Lutz

Re: GUI-Scripting innerhalb von RagTime?

#8419 On 23 Februar, 2009 15:39 Lutz-Dieter Bornemann said,

Am 22.02.2009 um 22:04 schrieb Norbert Lindenthal:

> Was ich auch probiere, es führt zur selben Fehlermeldung. Aber aus
> dem Skripteditor läufts.
> NL

Hallo Norbert,

vielen Dank für Deine Mühe.
Detlef Schulz hat uns inzwischen aufgeklärt.

Ich finde, er hat ein wirklich brauchbares Buch geschrieben.

Gruß
Lutz