• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Wir haben den Frühjahrsputz beendet, Ihr auch? Welches Foto zu dem Thema hat Euch dann am Besten gefallen? Hier geht es lang zur Abstimmung --> Klick

Automator Frage

Faert

Gala
Registriert
13.02.08
Beiträge
49
Hallo,

ich bin nicht wirklisch sicher ob das Forum das richtige ist. Aber ein passendes Unterforum zu Automatorthemen habe ich nicht gefunden.

Folgendes Problem: Mein Macmini hängt am TV und ich würde gern mit dem Automator ein kleinen Ablauf erstellen, der immer zusieht das Frontrow wieder gestartet wird. Ich starte zBsp eyetv oder XBMX aus Frontrow heraus. Aber wenn ich eyetv oder xbmx beende, ist Fronrow dann auch immer aus. Nun würde ich mir wünschen das der Automator merkt das sich der eyeTV Prozess beendet hat und dann das Frontrow wieder startet. Das gleiche dann halt auch mit xbmc.

Hat da jmd eine Idee zu? Is das mit dem Automator überhaupt umsetzbar?

Danke für eure Hilfe
Faert
 

Samsas Traum

Pommerscher Krummstiel
Registriert
24.04.08
Beiträge
3.025
Hm, so ausm Stehgreif:

Code:
repeat
	if application "XBMC" is running then
		set xbmc to true
	else
		set xbmc to false
	end if
	
	if application "EyeTV" is running then
		set eyetv to true
	else
		set eyetv to false
	end if
	
	if application "Front Row" is running then
		set frontrow to true
	else
		set frontrow to false
	end if
	
	if xbmc is false then
		if eyetv is false then
			if frontrow is false then
				run application "Front Row"
			end if
		end if
	end if
	delay 60
end repeat

Das ganze im AppleScript Editor einfügen, als Programm speichern (nicht Script).
Denn Systemeinstellungen -> Benutzer -> Anmeldeobjekte das Programm hinzufügen.
Denn startet es sofort nach dem Hochfahren, und startet Front Row.
Das Programm überprüft alle 60s ob eins der Programme läuft, und wenn nicht startet es Front Row. Sollten 60s nicht gut sein, kannste das im Punkt "Delay 60" anpassen.
Wenn die Überwachung nicht laufen soll, einfach das Programm beenden.
 

Faert

Gala
Registriert
13.02.08
Beiträge
49
hey,

danke erst einmal für dein schnelle Hilfe !

Ich hab das ganze jetzt mal im AppleScript-Editor eingefügt. Wenn ich es speichern möchte, meckert er mit "Syntaxfeher". Die Fehlermeldung heißt im ganzen dann ""Unbekanntes Token" kann nicht diesem "repeat" folgen". Dabei zeigt er auf die letzte Zeile mit "end repeat". Ich kenne mich mit AppleScript leider garnicht aus :/
 

Samsas Traum

Pommerscher Krummstiel
Registriert
24.04.08
Beiträge
3.025
Das ist komisch, wirklich 1zu1 kopiert ? Oben fängts mit "repeat" an und unten hörts mit "end repeat" auf ?
Habs grad bei mir ausprobiert und funktioniert soweit.
Die Fehlermeldung weißt z.B. auf irgendwelche falsch gesetzten Zeichen hin (zuviel oder zu wenig)
Vergleich nochmal die Zeichen, durchs kopieren kann auchmal was verändert werden.
 

Faert

Gala
Registriert
13.02.08
Beiträge
49
Ich habe es nun auf meinem Macbook Air probiert und hier lief es auch auf anhieb! Das ganze als Script gespeichert und auf dem MacMini geöffnet. Dort als Programm gespeichert. Grad läuft der Funktionstest. Mal schauen :)
 

Faert

Gala
Registriert
13.02.08
Beiträge
49
Also bei mir funktioniert das Programm an sich. Aaaaber ich habe ein anderes Problem. Frontrow wollte bei mir nicht starten. Also habe ich mir beholfen und hab Dialogboxen eingebaut um zu schauen wieso es nicht läuft. Dabei stellt sich heraus, das Frontrow scheinbar doch irgendwie läuft. Schaue ich aber mit ALT-Apfel-ESC in die laufenden Programme, steht Frontrow dort nicht drin!?
 

Samsas Traum

Pommerscher Krummstiel
Registriert
24.04.08
Beiträge
3.025
Ahhh, Problem nachvollzogen und gelöst. Statt nun run application "Front Row", einfach die Tastenkombination (cmd+esc) simulieren. Und so sollte es denn klappen:

Code:
repeat
	if application "XBMC" is running then
		set xbmc to true
	else
		set xbmc to false
	end if
	
	if application "EyeTV" is running then
		set eyetv to true
	else
		set eyetv to false
	end if
	
	if application "Front Row" is running then
		set frontrow to true
	else
		set frontrow to false
	end if
	
	if xbmc is false then
		if eyetv is false then
			if frontrow is false then
				tell application "System Events"
					key code 53 using command down
				end tell
			end if
		end if
	end if
	delay 60
end repeat
 

Faert

Gala
Registriert
13.02.08
Beiträge
49
Einen riesen Danke !

Das Problem wird sein, dass das Programm garnicht bis zu dem "tell application" kommen wird. Frontrow ist quasi ja immer aktiv und deshalb wird die Variable frontrow immer true sein. Oder habe ich etwas übersehen?
 

Samsas Traum

Pommerscher Krummstiel
Registriert
24.04.08
Beiträge
3.025
Wir haben beide irgendetwas übersehen. Front Row ist nicht immer aktiv, allerdings führt das Ausführen von application "Front Row" nicht das Umschalten zum Vollbild Modus aus, startet allerdings den Prozess. Danach ist der Prozess immer da, und nichts passiert weiter. Warum das so ist ... keine Ahnung, aber zumindest ist das Problem gelöst ;) Denn mit Beendung des Vollbild Modus, wird auch Front Row beendet.
 

Faert

Gala
Registriert
13.02.08
Beiträge
49
Ich denke Frontrow ist bei mir nicht beendet. Ich starte durch ein Plugin EyeTV direkt aus Frontrow heraus und dieses Plugin wird Frontrow scheinbar nicht korrekt beenden. Wenn ich dein Script laufen lasse und mir den Status der Variable frontrow ausgeben lasse, steht diese immer auf true.

Eine andere Idee wäre dieses Plugin für Frontrow noch einmal zu überarbeiten. Hast du eine Idee wie diese Plugins realisiert sind?
 

Samsas Traum

Pommerscher Krummstiel
Registriert
24.04.08
Beiträge
3.025
Das doofe bei den Plug-Ins ist, das sie Use-Only sind. Sprich Benutzer es nicht ändern können. Ist zumindest meist so. Ich versuch grad schon verzweifelt den Prozess killen zu lassen. Aber irgendwie will weder AppleScript, noch Shell (was sehr verwunderlich ist) , ... ich google mal weiter ;)
 

Samsas Traum

Pommerscher Krummstiel
Registriert
24.04.08
Beiträge
3.025
So habs, musste nur geringfügig anpassen:
Die beiden "samsastraum" zu deinem Benutzernamen ändern, so wie dein Benutzerordner heißt, also klein und zusammengeschrieben alles.
Also in meinem Fall nicht Samsas Traum, sondern samsastraum.
Zu beachten ist das jeweilige Leerzeichen hinter dem Benutzernamen, das muss bleiben!
Und hier die Lösung:
Code:
repeat
	if application "XBMC" is running then
		set xbmc to true
	else
		set xbmc to false
	end if
	
	if application "EyeTV" is running then
		set eyetv to true
		tell application "System Events"
			set grep to do shell script "ps aux | grep \"Front Row\"" as text
			set AppleScript's text item delimiters to "samsastraum "
			set part1 to text item 2 of grep
			set AppleScript's text item delimiters to "   "
			set pid to text item 1 of part1
			set AppleScript's text item delimiters to "samsastraum "
			do shell script "kill " & pid
		end tell
		
	else
		set eyetv to false
	end if
	
	if application "Front Row" is running then
		set frontrow to true
	else
		set frontrow to false
	end if
	
	if xbmc is false then
		if eyetv is false then
			if frontrow is false then
				tell application "System Events"
					key code 53 using command down
				end tell
			end if
		end if
	end if
	delay 60
end repeat
 

Faert

Gala
Registriert
13.02.08
Beiträge
49
Super!

Er macht jetzt genau das, was er machen soll. Schaltet man EyeTV oder XMBC aus, startet er Frontrow danach wieder. Einen riesen Dank !
 

Faert

Gala
Registriert
13.02.08
Beiträge
49
Mir fällt noch eine Frage spontan ein. Weißt du ob man mittels AppleScript den Mauszeiger auf dem Bildschirm positionieren kann?
 

fyysh

Schweizer Glockenapfel
Registriert
25.01.10
Beiträge
1.386
Samsa, nur mal aus Interesse:

Warum killst du Frontrowt nicht so:
do shell script "if ps aux | grep 'Front Row';then killall 'Front Row';fi"

oder alternativ

do shell script "if killall -d 'Front Row'; then killall 'Front Row';fi"

?

Gibt es einen besonderen Grund, warum du über die PID gehst?
 

Samsas Traum

Pommerscher Krummstiel
Registriert
24.04.08
Beiträge
3.025
Das Problem ist:
Wenn man Front Row mittels einem Plug-In beendet, wird zwar Front-Row optisch geschlossen, aber ein Prozess läuft weiter, der das spätere automatische starten von Front Row verhindert. Dieser Prozess hat zwar in der Aktivitätsanzeige den Namen "Front Row" und auch eine eindeutige PID, allerdings lässt sich der Prozess aus mir unerfindlichen Gründen nicht via
Code:
tell application "Front Row"
quit
end tell
beenden.

Denn habe ich es mit versucht mittels System Events den Prozess mittels Namen zu killen, wollte auch nicht.

Als nächstes wollte ich mittels System Events die PID haben und via shell script "kill" bzw. "killall" den Prozess loswerden, fehlanzeige, die ermittelte PID ist vollkommen wirr.

Achso, einfach shell "kill Front Row" bzw. "killall Front Row" war auch nicht von Erfolg gekrönt.

Mittels ps habe ich denn zumindest die richtige PID rausschneiden können, welche denn auch funktionierte.

Edit: Hab das ganze grad nochmal mit genau dem simuliert was du vorgeschlagen hast, Ergebnis:
No matching processes ...
 

Faert

Gala
Registriert
13.02.08
Beiträge
49
Mauszeiger positionieren

Zum Mauszeiger positionieren habe ich gerade was gefunden. Gibts da vllt noch ne tollere Variante?

Code:
do shell script "python -c 'from Quartz import *;  CGEventPost(kCGHIDEventTap, CGEventCreateMouseEvent(None,  kCGEventMouseMoved, CGPointMake(30,30), kCGMouseButtonLeft))'"
 

Samsas Traum

Pommerscher Krummstiel
Registriert
24.04.08
Beiträge
3.025
Ist doch soweit i.O. das von dir. Sag wo der Zeiger landen soll, und wann er automatisch verschoben werden soll, und denn wird das schon ;)
 

Faert

Gala
Registriert
13.02.08
Beiträge
49
Ich bin soweit glücklich :)

Mir ist eben nur aufgefallen, als ich meinen Macmini neustarten wollte um zu schauen ob beim Neustart auch alles funktioniert. Konnte er das Programm zum Frontrow-Neustart nicht beenden. Trauriger Einzelfall?
 

Samsas Traum

Pommerscher Krummstiel
Registriert
24.04.08
Beiträge
3.025
Muss nicht unbedingt ein trauriger Einzelfall sein, wie fährst du runter ? Also durchs Menü, Tastenkombo, ...

Einfache Lösung wäre z.B. die von uns erstellte App von selbst zu beenden wenn sich dein Mini sich ne bestimmte Zeit langweilt (sprich nichts tut). Man könnte ihn in dem Fall aber auch gleich herunterfahren. Er startet ja Front Row denn, also tut immer was ... Man könnte auch durch erneutes Starten der bereits laufenden App das Programm beenden und das Herunterfahren einleiten ...

Es lassen sich natürlich denn auch noch Fenster einblenden, die dich vorher warnen, und du gegebenenfalls die Aktion bestätigen musst.