6 votos

AppleScript: cierre todos los Windows abiertos

Estoy tratando de escribir un script de apple para cerrar todas las Windows abiertas. Lo siguiente es lo que he intentado:

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. Obtengo:

Error de secuencia de comandos: los Eventos del Sistema en un error: no se Puede obtener de la aplicación (punto 1 de cada proceso de solicitud cuya visible = true). número de -1728

No me importa si las aplicaciones de dejar de fumar o si acaba de cerrar las ventanas.

Traté de depuración de esto, pero no pude obtener esta secuencia de comandos se abrió en Xcode.


Edit: Gracias a user3439894 he resuelto de la siguiente secuencia de comandos que sólo envía Command + Q a cada una de las visibles y de las aplicaciones:

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 sugerido, tengo que ir a través de y comprender la Guía de Lenguaje de AppleScript

7voto

user3439894 Puntos 5883

La primera cuestión es en qué (application processes where visible is true) devuelve.

Como un ejemplo, en una instalación limpia de macOS 10.13 con sólo Finder y Editor de secuencias de Comandos abierta:

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

Devuelve:

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

Lo que realmente se desea es obtener una lista de los nombres de las aplicaciones que son visibles, por ejemplo:

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

Devuelve:

{"Script Editor", "Finder"}

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

Ahora he abierto algunos documentos en TextEdit y vista previa y algunas ventanas de Finder y luego corrió el ejemplo de AppleScript código. De cerrar todos los documentos abiertos en TextEdit y vista previa y todas las ventanas de Finder, pero no el Editor de secuencias de Comandos.

Nota: Esto no va a cerrar y Editor de secuencias de Comandos de documentos y en silencio los errores con:

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

Ejemplo de 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 de AppleScript código codificado como no va a cerrar todos los documentos o cerrar todas las ventanas de una aplicación que no admite los comandos y debe fallar en silencio a causa de la try comando.

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

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X