1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Alle Programme beenden

Dieses Thema im Forum "AppleScript" wurde erstellt von Dante101, 10.03.06.

  1. Dante101

    Dante101 Ralls Genet

    Dabei seit:
    11.10.05
    Beiträge:
    5.052
    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
     
    #1 Dante101, 10.03.06
    Zuletzt bearbeitet: 10.03.06
  2. Daisy

    Daisy Uelzener Rambour

    Dabei seit:
    14.01.06
    Beiträge:
    366
    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.
     
  3. Daisy

    Daisy Uelzener Rambour

    Dabei seit:
    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.
     
  4. Dante101

    Dante101 Ralls Genet

    Dabei seit:
    11.10.05
    Beiträge:
    5.052
    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
     
  5. Daisy

    Daisy Uelzener Rambour

    Dabei seit:
    14.01.06
    Beiträge:
    366

    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
     
  6. Dante101

    Dante101 Ralls Genet

    Dabei seit:
    11.10.05
    Beiträge:
    5.052
    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 ... :)
     
  7. Daisy

    Daisy Uelzener Rambour

    Dabei seit:
    14.01.06
    Beiträge:
    366
    ;)

    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.
     
  8. Dante101

    Dante101 Ralls Genet

    Dabei seit:
    11.10.05
    Beiträge:
    5.052
    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
     
  9. Daisy

    Daisy Uelzener Rambour

    Dabei seit:
    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.
     
  10. Dante101

    Dante101 Ralls Genet

    Dabei seit:
    11.10.05
    Beiträge:
    5.052
    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.
     
  11. Daisy

    Daisy Uelzener Rambour

    Dabei seit:
    14.01.06
    Beiträge:
    366
    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.
     
    Dante101 gefällt das.
  12. Dante101

    Dante101 Ralls Genet

    Dabei seit:
    11.10.05
    Beiträge:
    5.052
    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
     
  13. birdee

    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!
     
  14. Atelis

    Atelis Akerö

    Dabei seit:
    01.03.07
    Beiträge:
    1.831
    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
     
  15. pacharo

    pacharo Gelbe Schleswiger Reinette

    Dabei seit:
    08.02.04
    Beiträge:
    1.739
    Sollte aber laufen - Dante101 hat doch 'nen PPC...;)

    Gruss
    pacharo
     
  16. Atelis

    Atelis Akerö

    Dabei seit:
    01.03.07
    Beiträge:
    1.831
    also word beendet es nicht - und das ist noch ppc...
     
  17. space

    space Neuer Berner Rosenapfel

    Dabei seit:
    02.12.05
    Beiträge:
    1.950
    DasSkript aus Post Nr. 7 beendet auf meinem PPC auch Word...

    Gruss
     
  18. Atelis

    Atelis Akerö

    Dabei seit:
    01.03.07
    Beiträge:
    1.831
    oh, danke - das funktioniert ja... :innocent:
     
  19. the x-master

    the x-master Riesenboiken

    Dabei seit:
    29.01.06
    Beiträge:
    290
    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.
     
  20. Atelis

    Atelis Akerö

    Dabei seit:
    01.03.07
    Beiträge:
    1.831
    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...)
     

Diese Seite empfehlen