AppleScript: cerrar todas las ventanas abiertas

6

Estoy intentando escribir un script de Apple para cerrar todas las ventanas abiertas. Lo siguiente es lo que intenté:

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

Esto no parece funcionar. Me sale:

  

Error de secuencia de comandos: Los eventos del sistema obtuvieron un error: No se puede obtener la aplicación (elemento 1 de cada proceso de aplicación cuyo visible = verdadero). número   -1728

No me importa si las aplicaciones se cierran o si solo se cierran las ventanas.

Intenté depurar esto, pero no pude abrir este script en Xcode.

Editar: Gracias a usuario3439894 Me he conformado con el siguiente script que solo envía Command + Q a cada una de las aplicaciones visibles:

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

Esto funciona para mí por ahora. Como user3439894 sugirió, necesito revisar y entender Guía del lenguaje AppleScript

    
pregunta O.O. 24.11.2017 - 17:44

1 respuesta

4

El primer problema está en lo que (application processes where visible is true) devuelve.

Como ejemplo, en una instalación limpia de macOS 10.13 con solo Finder y Script Editor abierto:

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

Devoluciones:

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

Lo que realmente quieres es obtener una lista de nombres de aplicaciones que estén visibles, por ejemplo:

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

Devoluciones:

{"Script Editor", "Finder"}

El siguiente ejemplo AppleScript código intentará cerrar todos los documentos abiertos de cada aplicación y, en caso de error, cerrar todas las ventanas.

Ahora abrí algunos documentos en TextEdit y Vista previa y algunas ventanas en Finder y luego ejecuté el ejemplo < fuerte> AppleScript código . Cerró todos los documentos abiertos en TextEdit y Vista previa y todas las ventanas en Finder , pero no Script Editor .

Nota : esto no se cerrará y los documentos del Editor de secuencias de comandos se producirán errores de forma silenciosa con:

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

Ejemplo AppleScript código :

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

También tenga en cuenta que con este ejemplo AppleScript código como codificado no cerrará todos los documentos o cierre cada ventana de una aplicación que no admita esos comandos y debería fallar silenciosamente debido al comando try .

Este ejemplo AppleScript código se presenta para ilustrar lo que está mal con su actual código y un ejemplo de cómo ayudar a lograr su objetivo.

    
respondido por el user3439894 24.11.2017 - 19:17

Lea otras preguntas en las etiquetas