2017-07-14 4 views
1

Ich habe einen Apple gemacht all Anwendungen zu schließen:Wie verwende ich AppleScript, um alle versteckten Anwendungen zu schließen?

tell application "System Events" to set quitapps to name of every application process whose visible is true and name is not "Finder" 
    repeat with closeall in quitapps 
    quit application closeall 
end repeat 

Es funktioniert gut. Es beendet alle offenen Anwendungen.

Mein Problem ist, dass ich dieses Skript ändern möchte, um nur die Anwendungen zu schließen, die ausgeblendet sind. Aus irgendeinem Grund verbirgt Apple alle Apple-Apps ohne aktive Fenster, und schließlich verbraucht es meinen RAM.

Was ich dachte, war, dass, wenn ich, ich würde dieses Ergebnis nur die whose visible is true zu whose visible is false Linie ändern bekommen.

Nicht ganz:

Weird pop-up window

Ich weiß nicht einmal wissen, was das Fenster sein soll, so schlage ich einfach abzubrechen.

Nun, es taucht wieder auf. Es stellt sich heraus, dass ich genau viermal drücken muss, bevor das Skript ausbricht.

Gibt es eine Möglichkeit, alle versteckten Anwendungen zu beenden, während die sichtbaren geöffnet bleiben?

(Bonuspunkte, wenn Sie das Pop-up oben erklären kann.)

Wenn es einen Unterschied macht, bin ich die neueste Version von OSX läuft.

Antwort

1

Die Einstellung visible auf false wirkt sich auf alle Prozesse aus - auch auf Prozesse/Anwendungen ohne GUI. Wenn ein Prozess keine Anwendung (.app) ist, wird die Anwendungsauswahl angezeigt.

Fügen Sie einen Haken für background only ein, der nur Anwendungen mit einer GUI betrifft.

tell application "System Events" to set quitapps to name of every application process whose visible is true and background only is false and name is not "Finder" ... 
+0

Dies tut genau das * Gegenteil * von dem, was ich suche. Es hat jede Anwendung beendet, die offen und nicht versteckt war. Ich habe versucht, die Zeile zu '' wessen Sicht ist falsch und nur Hintergrund ist falsch 'zu ändern und es hat nichts getan. Ändert man es zu 'wessen sichtbar ist falsch und nur Hintergrund ist wahr', habe ich gerade mein Dock neu gestartet. Alle haben die versteckten Anwendungen geöffnet. – DonielF

+0

"sichtbar" in Systemereignissen bedeutet "nicht versteckt" und "nur Hintergrund" bedeutet gesichtslose App ohne GUI oder "keine App". Nur Anwendungen ('.app) reagiere auf den 'quit' Befehl – vadian

+0

Okay, aber das tut immer noch nicht das, was ich suche. – DonielF

0

Wenn ich richtig verstehe, sprechen Sie darüber, wie wenn Sie auf die rote Taste drücken, es schließt nur die Fenster der Anwendung, aber nicht die Anwendung selbst, es ist so einfach mit dem linken noch offen da.

In diesem Fall können Sie dieses Skript verwenden ich gemacht, es scheint, es funktioniert einwandfrei:

-- Get open apps 
tell application "System Events" to set openApps to name of every application process whose background only is false and name is not "Finder" 

-- Do this for every open app 
repeat with openApp in openApps 
    tell application openApp 
     -- Tell application to quit if it doesn't have any open windows 
     if (count of windows) is less than or equal to 0 then quit 
    end tell 
end repeat 
+0

Ich weiß nicht wie es dir geht, aber wenn ich es laufe funktioniert es überhaupt nicht. Wenn die App ausgeblendet ist, werden die Fenster weiterhin als offen erkannt. Wenn alle Fenster geschlossen sind, aber die Anwendung geöffnet ist, wird die App immer noch nicht geschlossen. – DonielF

+0

Werfen Sie einen Blick auf "openApps" und die "Anzahl der Fenster" mit einer Anwendung, die geöffnet ist, aber keine Fenster geöffnet hat, sagen Sie mir die Ergebnisse. – Kamdroid

0

OSX nicht "verstecken" apps. Sie sind nur nicht aktiv oder haben keine offenen Dokumente. Versteckte Apps ist ein sehr spezifischer Prozess, der normalerweise mit Command-H durchgeführt wird. Apps verstecken sich nicht auf diese Weise.

Anstatt zu versuchen, Apps ohne Fenster zu schließen, ermitteln Sie anhand der Anzahl der Dokumente, ob eine App geschlossen werden soll.

tell application "SomeApp" if count of documents = 0 then quit 
Verwandte Themen