AppleScript: chiudi tutte le finestre aperte

6

Sto provando a scrivere uno script Apple per chiudere tutti i Windows aperti. Quello che segue è quello che ho provato:

tell application "System Events"
  repeat with theProcess in (application processes where visible is true)
      tell application theProcess
          close
      end tell
   end repeat
end tell

Questo non sembra funzionare. Ottengo:

Script Error: System Events got an error: Can't get application (item 1 of every application process whose visible = true). number -1728

Non mi interessa se le applicazioni si chiudono o se solo le finestre si chiudono.

Ho provato a eseguire il debug di questo, ma non ho potuto ottenere questo script aperto in Xcode.

Modifica: grazie a user3439894 ho scelto lo script seguente che invia appena Command + Q a ciascuna delle applicazioni visibili:

tell application "System Events"
    set theVisibleApps to (name of application processes where visible is true)
end tell



repeat with thisApp in theVisibleApps
    try
        tell application thisApp to activate
        tell application "System Events"
            keystroke "q" using command down
        end tell
    on error errMsg
        display dialog errMsg
    end try
end repeat

Questo per me funziona per ora. Come suggerito da utente3439894 , ho bisogno di esaminare e comprendere Guida alla lingua AppleScript

    
posta O.O. 24.11.2017 - 17:44
fonte

1 risposta

4

Il primo problema riguarda ciò che (application processes where visible is true) restituisce.

Ad esempio, su un'installazione pulita di macOS 10.13 con solo Finder e Script Editor aperto:

tell application "System Events" to get application processes where visible is true

Returns:

{application process "Script Editor" of application "System Events", application process "Finder" of application "System Events"}

Ciò che desideri veramente è ottenere un elenco di nomi di applicazioni visibili, ad esempio:

tell application "System Events" to get name of every application process where visible is true

Returns:

{"Script Editor", "Finder"}

Il seguente esempio codice AppleScript cercherà di chiudere tutti i documenti aperti di ciascuna applicazione e in caso di errore chiudere tutte le finestre.

Ora ho aperto alcuni documenti in TextEdit e Anteprima e alcune finestre in Finder , quindi ho eseguito l' esempio < strong> AppleScript codice . Ha chiuso tutti i documenti aperti in TextEdit e Anteprima e tutte le finestre in Finder , ma non Script Editor .

Nota : non chiuderà e i documenti di Script Editor e gli errori silenziosi con:

error "The document can’t be closed while the script is running."

Esempio AppleScript codice :

tell application "System Events"
    set theVisibleApps to (name of application processes where visible is true)
end tell

repeat with thisApp in theVisibleApps
    try
        tell application thisApp
            try
                close every document without saving
            on error
                close every window
            end try
        end tell
    end try
end repeat

Nota anche che con questo esempio AppleScript codice come codificato non chiudi ogni documento o chiudi ogni finestra di una applicazione che non supporta quei comandi e dovrebbe fallire silenziosamente a causa del comando% em_de% .

Questo esempio codice AppleScript viene presentato per illustrare cosa c'è di sbagliato nel tuo codice e in un esempio di come aiutare a raggiungere il tuo obiettivo.

    
risposta data 24.11.2017 - 19:17
fonte

Leggi altre domande sui tag