• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Alle Programme beenden

Dante101

Ralls Genet
Registriert
11.10.05
Beiträge
5.048
Ich habe eine für Euch sicher einfach zu beantwortende Frage:
Wie lautet das Applescript um alle Programme zu beenden?

EDIT: vielleicht mit einer Erweiterung: ausgenommen ein bestimmtes Programm und natürlich der Finder. Es darf ausserdem kein Force-Quit sein, sondern sollte eine Option zum Speichern nicht gesicherter Dateien lassen. Wie könnte man das machen?

Lieben Gruß
Daniel
 
Zuletzt bearbeitet:

Daisy

Uelzener Rambour
Registriert
14.01.06
Beiträge
366
Dante101 schrieb:
Ich habe eine für Euch sicher einfach zu beantwortende Frage:
Wie lautet das Applescript um alle Programme zu beenden?

EDIT: vielleicht mit einer Erweiterung: ausgenommen ein bestimmtes Programm und natürlich der Finder. Es darf ausserdem kein Force-Quit sein, sondern sollte eine Option zum Speichern nicht gesicherter Dateien lassen. Wie könnte man das machen?

Lieben Gruß
Daniel

Hi Daniel,

so sollte es für die meisten Programme funktionieren:

Code:
property excludeApps : {"Finder", "iTunes", "Mail"}

tell application "System Events"
	set allApps to name of every process whose visible is true
end tell

repeat with thisApp in allApps
	if not (excludeApps contains thisApp) then

		-- * folgende Zeile ist optional - wenn du keine Rückfragen willst, mach sie weg:
		set theResult to display dialog "quit " & thisApp & "?" buttons {"no", "yes"} default button "no" giving up after 4
		
		with timeout of 10 seconds
			-- * die nächste muss dann auch weg:
			if button returned of theResult = "yes" then

				try
					tell application thisApp
						quit with saving
					end tell
				on error errMsg
					display dialog "Error " & errMsg giving up after 3
				end try
			-- * und die folgende auch weg:
			end if

		end timeout
		
	end if
end repeat

Grüße,

D.
 

Daisy

Uelzener Rambour
Registriert
14.01.06
Beiträge
366
Nachtrag:

Die obige Version sichert geänderte offene Dateien ungefragt. Wenn du da gefragt werden möchtest, musst du das ... saving yes in ... saving ask ändern.
 

Dante101

Ralls Genet
Registriert
11.10.05
Beiträge
5.048
Danke Daisy. Allerdings haut das nicht so hin, wie es sollte, denn ist z.B. XPress ausgeblendet, ist es nicht von dem Script betroffen.

Wenn ich allerdings die "visible-Klausel" (ich nenn die jetzt mal so ;)) rausnehme, fragt er mich bei sämtlichen Prozessen, die sonst im Hintergrund laufen. Logisch. Wie könnte man das lösen?

Auf jeden Fall schon mal Danke bisher.

Lieben Gruß
Daniel
 

Daisy

Uelzener Rambour
Registriert
14.01.06
Beiträge
366
Dante101 schrieb:
Wenn ich allerdings die "visible-Klausel" (ich nenn die jetzt mal so ;)) rausnehme, fragt er mich bei sämtlichen Prozessen, die sonst im Hintergrund laufen. Logisch. Wie könnte man das lösen?


Hallo Daniel,

du hast ja so recht - ich denke, so könnte es gehen:

tell application "System Events"
set allApps to name of every application process whose background only is false
end tell
...

Grüße,

Daisy
 

Dante101

Ralls Genet
Registriert
11.10.05
Beiträge
5.048
Klingt gut, aber mit dem Wortlaut stimmt was nicht:

Code:
Es wurde "Zeilenende" erwartet, aber ein "identifier" wurde gefunden.

o_O
Wenn ich doch nur ein bissl Ahnung hätt ... :)
 

Daisy

Uelzener Rambour
Registriert
14.01.06
Beiträge
366
Dante101 schrieb:
Klingt gut, aber mit dem Wortlaut stimmt was nicht:

Code:
Es wurde "Zeilenende" erwartet, aber ein "identifier" wurde gefunden.

o_O
Wenn ich doch nur ein bissl Ahnung hätt ... :)

;)

Komisch - bei mir (10.4.4) funktioniert das. Was hast du für eine OS X Version?

Hier zur Sicherheit nochmal das komplette Script :

Code:
property excludeApps : {"Finder", "iTunes", "Mail"}

tell application "System Events"
	set allApps to name of every application process whose background only is false
end tell

repeat with thisApp in allApps
	if not (excludeApps contains thisApp) then
		
		-- * folgende Zeile ist optional - wenn du keine Rückfragen willst, mach sie weg:
		set theResult to display dialog "quit " & thisApp & "?" buttons {"no", "yes"} default button "no" giving up after 4
		
		with timeout of 10 seconds
			-- * die nächste muss dann auch weg:
			if button returned of theResult = "yes" then
				
				try
					tell application thisApp
						quit with saving
					end tell
				on error errMsg
					display dialog "Error " & errMsg giving up after 3
				end try
				-- * und die folgende auch weg:
			end if
			
		end timeout
		
	end if
end repeat

Wenn das nicht tut, dann probiere bitte mal, was folgendes Miniskript ausspuckt:
Code:
tell application "System Events"
	get properties of process "loginwindow"
end tell

und poste das Ergebnis hier ...

Grüße,

D.
 

Dante101

Ralls Genet
Registriert
11.10.05
Beiträge
5.048
Hab das "ganze" Script zur Sicherheit auch nochmal kopiert und versucht, geht aber auch nicht.

Ich hab Version 10.3.9

Dein Miniscript meldet dies:
Code:
{class:application process, focused:missing value, displayed name:"loginwindow", orientation:missing value, has scripting terminology:false, maximum value:missing value, file:alias "Macintosh HD:System:Library:CoreServices:loginwindow.app:", subrole:missing value, position:missing value, selected:missing value, help:missing value, accepts high level events:true, size:missing value, visible:false, application file:alias "Macintosh HD:System:Library:CoreServices:loginwindow.app:", role:"AXApplication", Classic:false, file type:"APPL", description:"application", name:"loginwindow", creator type:"lgnw", total partition size:0, accepts remote events:false, value:missing value, title:"loginwindow", partition space used:0, frontmost:false, enabled:missing value, minimum value:missing value}

Er versteht anscheinend: "whose background only is false" nicht, oder?

Gruß
Daniel
 

Daisy

Uelzener Rambour
Registriert
14.01.06
Beiträge
366
Dann geht's so auch nicht ...

man könnte nachschauen, ob der Prozess eine 'Menu Bar' besitzt:
(geht nur mit aktiviertem 'Zugriff für Hilfsgeräte')

Code:
...
tell application "System Events"
	tell process thisApp
		set hasMenubar to (count menu bars) as boolean
	end tell
end tell
		
if (hasMenubar) then ...

oder, was vielleicht sicherer ist, ob es einen Eintrag im Dock hat:

Code:
tell application "Finder" to set allApps to application file of every application process

set dockApps to (do shell script "defaults read com.apple.dock | grep _CFURLString\\\"")

repeat with thisApp in allApps
	set pPath to POSIX path of thisApp
	if dockApps contains pPath then
		set theResult to display dialog "quit " & thisApp & "?" buttons {"no", "yes"} default button "no" giving up after 4
		
		with timeout of 10 seconds
			if button returned of theResult = "yes" then
				try
					tell application (thisApp as Unicode text)
						quit with saving
					end tell
				on error errMsg
					display dialog "Error " & errMsg giving up after 3
				end try
			end if
		end timeout
	end if
	
end repeat

Ich hoffe, davon klappt was bei dir ;)

Grüße,

D.
 

Dante101

Ralls Genet
Registriert
11.10.05
Beiträge
5.048
Hab dieses Script probiert (als App abgespeichert):
Code:
tell application "Finder" to set allApps to application file of every application process

set dockApps to (do shell script "defaults read com.apple.dock | grep _CFURLString\\\"")

repeat with thisApp in allApps
        set pPath to POSIX path of thisApp
        if dockApps contains pPath then
                set theResult to display dialog "quit " & thisApp & "?" buttons {"no", "yes"} default button "no" giving up after 4
                
                with timeout of 10 seconds
                        if button returned of theResult = "yes" then
                                try
                                        tell application (thisApp as Unicode text)
                                                quit with saving
                                        end tell
                                on error errMsg
                                        display dialog "Error " & errMsg giving up after 3
                                end try
                        end if
                end timeout
        end if
        
end repeat

Hat aber gar nichts gemacht.
Nicht gejammert, keine Fehlermeldung, aber auch nichts geschlossen o_O

LG
D.
 

Daisy

Uelzener Rambour
Registriert
14.01.06
Beiträge
366
Dante101 schrieb:
Hat aber gar nichts gemacht.
Nicht gejammert, keine Fehlermeldung, aber auch nichts geschlossen o_O

LG
D.
Hallo Daniel

Heul - das war mir nicht bewußt, wieviel sich da von 10.3.9 auf 10.4 geändert hat ...
Also habe ich halt mal das 10.3er System angeschmissen und nachgeschaut.
Hier das Ergebnis (so müsste es jetzt unter 10.3 und 10.4 laufen):

Code:
property excludeApps : {"Finder.app", "Mail.app", "iTunesHelper.app"}
tell application "Finder" to set allApps to application file of every application process


set olddelims to AppleScript's text item delimiters
set AppleScript's text item delimiters to ":"

repeat with thisApp in allApps
	set pPath to POSIX path of thisApp
	set thisApp to thisApp as Unicode text
	if character -1 of thisApp = ":" then
		set nameOfThisApp to (text item -2 of thisApp)
		if (nameOfThisApp is not in excludeApps) then
			try
				(do shell script ("cat " & (quoted form of (POSIX path of thisApp) & "Contents/Info.plist")) & " | grep UIElement")
				set backgr to true
			on error
				set backgr to false
			end try
			if (not backgr) then
				set theResult to display dialog "quit " & nameOfThisApp & "?" buttons {"no", "yes"} default button "no" giving up after 4
				
				with timeout of 10 seconds
					if button returned of theResult = "yes" then
						try
							tell application thisApp
								quit with saving
							end tell
						on error errMsg
							display dialog "Error " & errMsg giving up after 3
						end try
					end if
				end timeout
			end if
		end if
	end if
end repeat
set AppleScript's text item delimiters to olddelims

Grüße,

D.
 
  • Like
Reaktionen: Dante101

Dante101

Ralls Genet
Registriert
11.10.05
Beiträge
5.048
Jawoll! Danke für Dein Engagement. Grundsätzlich funktioniert das jetzt super. Brauch es jetzt nurmehr a bisserl auf meine Bedürfnisse zurechtschnippeln. Das sollt ich ja irgendwie allein hinkriegen ;)
Danke auf jeden Fall. Auf Dich kann man sich echt verlassen. Der Wahnsinn

Lieben Gruß
Daniel
 

birdee

Gast
TIPP: Alle (und nur bestimmte) Programme schneller beenden

Ich war auf der Suche nach einer ähnlichen Lösung. Hätte dabei noch einen Tipp für Euch, probiert in 10.4.5:

Mehrere/alle Programme (schnell und einfach) beenden mit "Dock-Tab":
Einfach Apfel+Tab drücken
Per Tab zum Programm, das beendet werden soll (Apfel gedrückt halten)
Apfel weiter gedrückt halten und einfach Q drücken.
Ggf. einfach abwechselnd Apfel-Tab, Apfel-Q, Apfel-Tab, Apfel-Q

Will man nicht alle offenen Programme durchlaufen und für jedes einzeln antworten müssen (so wie via Script von Daisy), ist das Beenden der Programme mit dem obigen Dock-Tab recht einfach, zumal sich die Q Taste direkt neben der Tab-Taste befindet. Aber Daisy: Dein Sript für 10.4 funktioniert auch wirklich super. Danke!
 

Atelis

Akerö
Registriert
01.03.07
Beiträge
1.835
ich weiß - der thread ist alt, aber das kann es sein, dass das script nicht für ppc programme funktioniert??
soweit ich das sehen kann guckt er nämlich in Contents/Info.plist nach, ob das programm im hintergrund läuft - nur haben ppc programme kein Contents/Info.plist...o_O
 

pacharo

Kaiserapfel
Registriert
08.02.04
Beiträge
1.734
ich weiß - der thread ist alt, aber das kann es sein, dass das script nicht für ppc programme funktioniert??
soweit ich das sehen kann guckt er nämlich in Contents/Info.plist nach, ob das programm im hintergrund läuft - nur haben ppc programme kein Contents/Info.plist...o_O

Sollte aber laufen - Dante101 hat doch 'nen PPC...;)

Gruss
pacharo
 

the x-master

Riesenboiken
Registriert
29.01.06
Beiträge
290
ich weiß - der thread ist alt, aber das kann es sein, dass das script nicht für ppc programme funktioniert??
soweit ich das sehen kann guckt er nämlich in Contents/Info.plist nach, ob das programm im hintergrund läuft - nur haben ppc programme kein Contents/Info.plist...o_O

Was willst du denn damit sagen ? Natürlich haben PPC Programe auch ein File, was Info.plist heißt. Wie kommst du darauf ?
Außerdem als Daisy das geschrieben hat, hatte noch keiner einen Intel.

Grüße,
X.
 

Atelis

Akerö
Registriert
01.03.07
Beiträge
1.835
Natürlich haben PPC Programe auch ein File, was Info.plist heißt. Wie kommst du darauf ?
Außerdem als Daisy das geschrieben hat, hatte noch keiner einen Intel.

mmh, stimmt... naja, mit dem script nr. 7 läuft alles bei mir - bei dem neuen reagieren die ppc programme nicht... (oder sind es nur programme, die kein programm-paket sind?? also bei denen man nicht mit einem rechtsklick den paketinhalt anzeigen kann...)