• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

Skript zum Überwachen eines Fußleisten-Textes

mabam

Golden Delicious
Registriert
06.06.14
Beiträge
10
Hallo!

Ich bin neu hier. Ich habe mit viel Suchen im Internet einen AppleScript geschrieben, mit dem ich aber noch nicht ganz zufrieden bin.

Ich verwende Snow Leopard Server als Virtual Machine in Parallels. Da man bei der Server-Version ums Einloggen nach dem Hochfahren nicht drumrum kommt, habe ich einen Skript geschrieben, der die VM startet und mich einloggt, nachdem diese hochgefahren ist.
Code:
tell application "Finder" to open "Macintosh HD:Users:user_name:Documents:Parallels:Snow Leopard Server.pvm"
delay 35
tell application "System Events" to keystroke tab & "admin" & tab & "password" & return

Nun kann das Hochfahren der VM aber zwischen ca. 15 und 35 Sekunden dauern, je nach Auslastung meines Systems (Mountain Lion) und abhängig davon, ob die VM zum ersten oder zum wiederholten Mal nach dem Booten des Computers gestartet wird. Um nur so lange wie nötig warten zu müssen, bis der Skript mich nach dem Erscheinen des Login-Fensters einloggt, würde ich den "delay 35" gerne etwas flexibler gestalten. Was im Gast-System der VM geschieht dürfte durch AppleScript im Host-System nicht erfasst werden können. Was sich jedoch ca. 2 Sekunden vor dem Erscheinen des Login-Fensters ändert, ist, dass in der Fußleiste des VM-Fensters (das ja als Fenster innerhalb des Prozesses "Parallels Desktop" noch zum Host-System gehört) eine Textzeile ausgeblendet wird ("Die Parallels Tools sind nicht installiert. …" Siehe Bilder unten).

Ist es möglich, diese Textzeile zu überwachen?
Ich stelle mir den Code dann ungefähr so vor:
Code:
tell application "Finder" to open "Macintosh HD:Users:user_name:Documents:Parallels:Snow Leopard Server.pvm"
delay 15
tell application "System Events"
    if the name of the front window of application process "Parallels Desktop" is "Snow Leopard Server - Parallels Desktop" then -- DUMMYZEILE
        delay 2
        ----------
        tell application "System Events"
            if the name of the front window of application process "Parallels Desktop" is "Snow Leopard Server - Parallels Desktop" then -- DUMMYZEILE
                delay 2
        -- Code zwischen den Linien an dieser Stelle noch achtmal verschachtelt einfügen.
            else
                delay 3
                tell application "System Events" to keystroke tab & "admin" & tab & "password" & return
            end if
        end tell
        ----------
    else
        delay 3
        tell application "System Events" to keystroke tab & "admin" & tab & "password" & return
    end if
end tell

Mein Problem ist, den richtigen Code für die "Dummyzeile" zu finden.
Wenn ich auf eines der Symbole in der Fußleiste klicke und diese Aktion mit Automator aufnehme, spuckt dieser mir folgenden Skript aus:
Code:
tell application "System Events" to click UI element 1 of group 1 of window "Snow Leopard Server - Parallels Desktop" of application process "Parallels Desktop"

Ich muss also vermutlich mit "… group 1 of window "Snow Leopard Server - Parallels Desktop"" arbeiten, nur was kommt statt dem Platzhalter "…"?
kl9w-l-3c59.png
kl9w-m-b6d7.png
 
Zuletzt bearbeitet:

Wuchtbrumme

Golden Noble
Registriert
03.05.10
Beiträge
21.540
geht automatisches Einloggen im SL Server nicht?

Es gibt Parallels CLI und eine Doku dazu, was das Starten der VM vereinfacht (wenn es nicht reicht, sie in die Anmeldeobjekte zu ziehen)
 

mabam

Golden Delicious
Registriert
06.06.14
Beiträge
10
Nein, die automatische Anmeldung existiert bei der Server-Version nicht.

Aus dem, was ich auf deinen Hinweis hin zu Parallels CLI gefunden habe, bin ich nicht schlau geworden. Außer einer Handvoll Shell- und AppleScripts habe ich mit Scripting oder etwa Programmieren noch nichts zu tun gehabt. Und zu diesen beiden lassen sich im Internet viele Beiträge von unzähligen Nutzern finden, wodurch ich schrittweise ein paar Kenntnisse aufbauen konnte. Aber bei Parallels CLI weiß ich nicht, wo ich ansetzen soll. Trotzdem danke für den Tipp!
Ich will die VM nicht in die Anmeldeobjekte ziehen, weil ich nicht täglich damit arbeite und sie mir sonst nur unnötig Rechenkapazität wegnimmt.

Ich habe festgestellt, dass es egal ist, auf welches Symbol innerhalb der Fußleiste des VM-Fensters ich klicke – der von Automator aufgenommene Code ändert sich nicht – das jeweilige Symbol wird nicht von Automator registriert. Mit AppleScript scheint Parallels mich da nicht tief genug reinzulassen.

Ich nutze jetzt eine andere Lösung:
Code:
tell application "Finder"
    if exists file "Macintosh HD:private:var:folders:a1:xxxxxxxxxxyyyyyyyyyyzzzzzzzzzz:B:Snow Leopard Server App.app" then
        tell application "Finder" to open "Macintosh HD:Users:user_name:Documents:Parallels:Snow Leopard Server.pvm"
        delay 17
        tell application "System Events" to keystroke tab & "admin" & tab & "password" & return
    else
        tell application "Finder" to open "Macintosh HD:Users:user_name:Documents:Parallels:Snow Leopard Server.pvm"
        delay 35
        tell application "System Events" to keystroke tab & "admin" & tab & "password" & return
    end if
end tell
Damit ist die Wartezeit bis zur automatischen Eingabe der Anmeldedaten wesentlich kürzer. Denn die 35 Sekunden wartet das Skript nur noch, wenn die VM wirklich viel länger braucht, weil sie zum ersten Mal nach dem Hochfahren des Computers gestartet wird. Erst dann wird nämlich "Snow Leopard Server App.app" erstellt und erst wieder beim Runterfahren des Computers (also des Host-Systems) gelöscht.
 

mabam

Golden Delicious
Registriert
06.06.14
Beiträge
10
Leider bin ich mit der in meinem letzten Post beschriebenen Lösung nicht sonderlich zufrieden. Die jeweiligen Zeiten, die die VM zum starten braucht, variieren einfach zu extrem.

Der in meinem ersten Post dieses Threads erwähnte Fußzeilen-Text erscheint auch nicht mehr und kann daher nicht zum Überwachen verwendet werden. Parallels scheint nach einigen Starts schon vor dem Erscheinen des Login-Fensters zu schnallen, dass die Parallels Tools installiert sind und weist jetzt nicht mehr durch einen Fußzeilen-Text darauf hin.

Ich will nun probieren den Menüpunkt "Neustart" im Kontextmenü des Parallels-Symbols im Dock zu überwachen. Der ist nämlich immer bis kurz vor dem Erscheinen des Login-Menüs ausgegraut:
kl9w-o-1ff1.png
kl9w-p-8e29.png


Mithilfe dieses Blog-Posts habe ich erstmal folgenden Skript geschrieben um die genaue Hierarchie mit den entsprechenden Bezeichnungen der UI-Elemente festzustellen:
Code:
tell application "System Events" to tell process "Dock"
    tell list 1
        perform action "AXShowMenu" of UI element "Parallels Desktop"
        delay 0.2
        perform action "AXShowMenu" of menu item "Aktionen" of menu 1 of UI element "Parallels Desktop"
        delay 0.2
        get value of attribute "AXSelected" of menu item "Neustart" of menu 1 of menu item "Aktionen" of menu 1 of UI element "Parallels Desktop"
    end tell
end tell
Die Antwort des Script-Editors ist immer "false", egal ob der Menüpunkt gerade ausgegraut oder aktiv ist. Dabei zeigt der unter obigem Link erwähnte Accessibility Inspector für das Attribut "AXSelected" bei ausgegrautem Menüpunkt immer "NO" an und bei aktivem "YES". Siehe Abbildung:
kl9w-n-3769.png


Liegt es eventuell an dem Wort "value" in der Zeile "get value of attribute "AXSelected" …"? Was könnte ich statt "value" verwenden? Oder vielleicht mache ich irgendwo anders einen Fehler. Kann jemand helfen?
 

mabam

Golden Delicious
Registriert
06.06.14
Beiträge
10
Nachdem ich nun festgestellt habe, dass ich das Attribut "AXEnabled" brauche und "AXSelected" für etwas anderes steht, habe ich den restlichen Skript fertig ausgearbeitet. Jetzt läuft alles so, wie ich es mir vorgestellt hatte. Das Kontext-Menü von Parallels Desktop im Dock blinkt zwar ein paarmal auf, aber damit kann ich gut leben.

Hier der fertige Skript:
Code:
tell application "Finder"
    if exists file "Macintosh HD:private:var:folders:a1:xxxxxxxxxxyyyyyyyyyyzzzzzzzzzz:B:Snow Leopard Server App.app" then
        open "Macintosh HD:Users:user_name:Documents:Parallels:Snow Leopard Server.pvm"
        delay 13
    else
        open "Macintosh HD:Users:user_name:Documents:Parallels:Snow Leopard Server.pvm"
        delay 30
    end if
    repeat 27 times
        tell application "System Events"
            tell process "Dock" to tell list 1 to perform action "AXShowMenu" of UI element "Parallels Desktop"
            delay 0.2
            if (value of attribute "AXEnabled" of menu item "Neustart" of menu 1 of menu item "Aktionen" of menu 1 of UI element "Parallels Desktop" of list 1 of process "Dock") then
                key code 53 -- ESC
                tell window "Snow Leopard Server – Parallels Desktop" of application "Parallels Desktop" to activate
                delay 4
                tell application "System Events"
                    keystroke "admin" & tab & "password" & return
                    error number -128 -- Skript stoppen
                end tell
            else
                key code 53 -- ESC
                delay 1
            end if
        end tell
    end repeat
end tell

Könnte ein Forum-Moderator evtl. den Titel dieses Themas in "Starten und automatisch anmelden einer OS X Server VM in Parallels" ändern?
Danke!
 
Zuletzt bearbeitet von einem Moderator: