1 votes

Applescript - Fermer toutes les fenêtres à l'exception de la fenêtre la plus en avant

J'ai créé une action rapide automator qui exécute l'apple script suivante

tell application "System Events"
    set frontApp to name of first application process whose frontmost is true --retrieves name of open application
end tell

tell application frontApp
    repeat while window 2 exists
        close window 2
    end repeat
end tell

Il fonctionne, mais il prend du temps à s'exécuter si j'ai beaucoup de fenêtres ouvertes.

Existe-t-il un moyen de fermer toutes les fenêtres simultanément à l'exception de celle qui se trouve à l'avant ?

J'ai tapé tell application "Finder" to close every window from 2 to 5 Après l'avoir compilé, il s'est automatiquement transformé en tell application "Finder" to close ( windows 2 thru 5 ) . Cependant, j'obtiens le message d'erreur suivant error "Finder got an error: Can’t get windows 2 thru 3." number -1728 from windows 2 thru 3 . Il accepte donc la structure de la commande, mais il me manque encore quelque chose.

Éditer : J'ai essayé le script suivant

tell application "Finder"
    close (every window where index is greater than 1)
end tell

Cependant, j'obtiens l'erreur suivante "Finder got an error: Handler can’t handle objects of this class." number -10010

Pourquoi cela ne fonctionne-t-il pas ?

5voto

OnePablo Points 1

Si vous l'exécutez en tant que Autómata action rapide Vous pouvez alors fermer toutes les fenêtres à l'exception de la fenêtre la plus en avant de l'application la plus en avant en utilisant le code ci-dessous à l'intérieur d'un fichier Exécuter AppleScript (vous pouvez supprimer tous les exemples de code qui apparaissent, y compris le code on run {input, parameters}...end run :

tell application id "com.apple.SystemEvents" to tell the first process ¬
    whose frontmost = true to tell a reference to windows 2 thru -1 to ¬
    if exists then tell the value of attribute "AXCloseButton" to click

1voto

Chris Norman Points 304

Essayez ceci. Il pourrait fonctionner plus rapidement. (j'ai édité ma réponse originale avec le nouveau code).

tell application "Finder"

    set theWindows to {}
    set theCount to (count of windows)
    if theCount is greater than 1 then
        repeat with i from 2 to theCount
            set theWindow to window i
            copy theWindow to end of theWindows
        end repeat
        close theWindows
    end if
end tell

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X