2 votes

Miniaturisez tous les Windows avec AppleScript

tell application "System Events"
    set mywindows to windows of (processes where background only is false)
    repeat with theItem in windows of (processes where background only is false)
        set miniaturized of theItem to true
    end repeat
end tell

Je reçois

error "System Events got an error: Can’t set miniaturized of UI element to any." number -10006 from miniaturized of UI element to any

1voto

OnePablo Points 1

J'ai répondu une question similaire sur Stack Overflow, à l'époque où je travaillais encore principalement dans High Sierra. Je l'ai testé aujourd'hui et il fonctionne toujours sur Catalina.

Voici la partie saillante de cette réponse :

tell application id "com.apple.systemevents" to set the value of ¬
        attribute "AXMinimized" of every window of every process ¬
        to true

Malheureusement, il ne va pas les minimiser tous simultanément, ce qui serait charmant. Il les fait un par un, sans nécessairement commencer par celui qui se trouve juste devant vous. Par conséquent, si vous avez de nombreuses fenêtres ouvertes, il peut sembler au premier abord qu'elle ne fait rien, mais en fait elle minimise les fenêtres masquées par celle qui se trouve le plus en avant), et elles seront minimisées à leur tour, ce qui est amusant à voir la première fois, mais irritant à chaque fois que vous voulez juste que ce soit fait maintenant.

Un autre point que @user3439894 m'a gentiment rappelé est que Événements du système ne connaît que les objets qui existent sur le bureau actuellement actif. Par conséquent, cette méthode ne permettra pas de minimiser les fenêtres qui se trouvent sur d'autres bureaux/espaces hors écran.

Toutefois, si vous ne cherchez pas spécifiquement à minimiser Windows, mais plutôt à le mettre hors de vue, vous pouvez choisir de masquer les processus à la place :

tell application id "com.apple.systemevents" to ¬
        set visible of every process to false

L'inconvénient majeur ici est que Finder reste visible, et devra avoir une ligne de code supplémentaire après pour se débarrasser de ses fenêtres, ce que je suggère de faire :

tell application id "com.apple.Finder" to set ¬
        miniaturized of every window to true

Les avantages, cependant, sont que toutes les fenêtres de tous les bureaux/écrans seront supprimées, et pas seulement celles qui se trouvent sur votre bureau actuel ; et cela se fait très rapidement, presque instantanément (à l'exception de Finder ). L'activation de l'application en cliquant sur son icône dans le dock, par exemple, rend le processus à nouveau visible ; en général, cela signifie que l'application et toutes ses fenêtres qui étaient précédemment visibles réapparaîtront en masse. Que cela soit positif ou négatif dépend de vos besoins.


La raison pour laquelle votre code ne fonctionne pas est que miniaturised n'est pas une propriété de l window appartenant à la suite de processus de Événements système Dictionnaire AppleScript. Il s'agit de est une propriété de window objets appartenant à l standard suite de tout scriptable le dictionnaire AppleScript de l'application (y compris SystemEvents bien qu'il n'ait pas de fenêtres propres) ; bien que partageant un nom commun, ces deux window Les objets de classe sont des objets distincts et non liés dans AppleScript.

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