8 votes

Applescript pour cliquer sur le bouton vert (zoom) avec Option down

Sur la base de Applescript - la commande "activer" rend l'application "semi-active". , j'ai écrit l'Applescript suivant qui me permettrait de cliquer sur le bouton vert (zoom) en haut à gauche d'une fenêtre. Je veux appliquer le script à MacVim et autres qui ont le bouton vert comme "AXFullScreenButton". Mais, l'exécution du script rend la fenêtre en PLEIN ÉCRAN plutôt qu'une fenêtre "maximisée". Quelqu'un peut-il dire ce qui ne va pas ?

tell application "System Events"
    key down option
    click (first button whose subrole is "AXFullScreenButton") of ¬ 
            (first window whose subrole is "AXStandardWindow") of ¬
            (first process whose frontmost is true)
    key up option
    set frontApp to (name of first application process whose ¬
            frontmost is true) as string
end tell
tell application frontApp to activate

0 votes

Le bouton vert n'a jamais signifié "maximiser", du moins dans le sens de maximiser une fenêtre dans Windows, et a toujours été une sorte de "hit-or-miss" quant à ce qu'il fait réellement. Récemment, cependant, il a changé de fonction pour fonctionner comme "passer en plein écran". C'est la fonction du bouton, donc votre script fonctionne correctement pour ce que vous lui demandez de faire.

0 votes

Par "maximiser", j'entendais "maximiser" dans le sens Mac, c'est-à-dire agrandir une fenêtre. Je sais que la fonction du bouton vert a changé dans Yosemite. Toutefois, le comportement du bouton vert dépend de la pression ou non d'Option (par exemple, Safari). Lorsque l'option est activée, le bouton se comporte de manière "classique" (agrandissement d'une fenêtre plutôt que plein écran). Par exemple, voir ce [lien]( osxdaily.com/2014/10/28/maximize-zoom-Windows-os-x-mac ).

0 votes

J'étais en train de chercher la même chose et j'ai décidé de créer un raccourci clavier pour activer le "Zoom" (puisque l'enregistrement de mon automate était différent pour le même bouton vert dans différentes applications). Un raccourci clavier répondrait-il à votre objectif final ou faites-vous quelque chose de plus sophistiqué ?

8voto

Vous pouvez utiliser l'une des actions de la fonction " AXFullScreenButton " :

  • " AXZoomWindow " pour maximiser l'action.
  • " AXPress "pour passer en plein écran.

Utilisez le perform action comme ceci.

tell application "System Events"
    perform action "AXZoomWindow" of (first button whose subrole is "AXFullScreenButton") of (first window whose subrole is "AXStandardWindow") of (first process whose frontmost is true)
end tell

0 votes

Bonjour, merci beaucoup. Je n'avais jamais entendu parler d'une commande "exécuter une action" auparavant. Où avez-vous trouvé votre "inspiration" ?!?

0 votes

@clensam lang, Dans le dictionnaire AppleScript des "System Events" : regardez à Processes Suite --> le perform et la commande UI element --> contient actions, attributs, navigateurs, et bien d'autres encore .

0 votes

Quand j'ai demandé à script-Editor d'afficher toutes les actions du bouton vert, il a dit : . . . {action "AXPress" du bouton 2 de la fenêtre "Sans titre" du processus d'application "script-Editor" de l'application "System Events", action "AXZoomWindow" du bouton 2 de la fenêtre "Sans titre" du processus d'application "script-Editor" de l'application "System Events"} . . . Mais l'inspecteur d'accessibilité a toujours répertorié "accessibilityPerformPress" sous "Actions", que l'on ait ou non appuyé sur "option" : Où peut-on apprendre les "fonctions" que contient un bouton ?

1voto

zonble Points 2925

Au cas où vous utiliseriez une application qui ne réagit PAS à AXZoomWindow de manière standard (comme BBEdit) ou si vous avez des réglages "favoris" différents pour Windows de différentes applications (j'aime Mail moins large que Safari), j'ai écrit un script qui maximise la fenêtre la plus en avant d'une application et la réinitialise selon vos préférences individuelles.

Voici quelques problèmes que j'ai rencontrés et que j'ai dû résoudre :
1.) Le "processus le plus en avant" quand il est appelé dans un script est "Événements système" ou "ScriptEditor". - fixer la valeur de "visible" à 0.
(Ne s'applique PAS aux raccourcis en mousqueton).
2.) Les valeurs maximales du bureau sont définies par size of scroll area 1 of process "Finder"
3.) La hauteur de la barre de menu sur mon système est de 22px, j'ai donc dû les soustraire à différents endroits.
4.) J'ai combiné les valeurs de position et de taille dans une variable mutuelle par application. Remplacez-les par les vôtres !
5.) Afin de n'adresser que les applications que vous voulez "Zoomer", il y a "maxMin" pour exclure d'autres -
      ajouter ou supprimer des applications à votre guise
6.) Bien sûr, vous devrez enregistrer le script/app avec "Assistive Access" (Security/System Prefs)
7.) Soit raccourcir ce script comme un "Service" (via Automator) dans Sys-Prefs, Keyboard, shortcuts, .
8.) ou utiliser l'ingénieux key-remapper Karabiner Elements avec une simple "Modification complexe" :

"from": {"key_code": "m", "modifiers": {"mandatory": ["left_option"]} },
  "to": [{"shell_command": "osascript ~/.config/myScpts/maxMin_zoom.app"}], **
"type": "basic"  

(** path and name: your choice)    

qui fournit un raccourci approprié sur place - j'ai choisi "Opt-M" car la plupart des combos "Z" sont utilisés.
Voici le script (SUPPRIMEZ les lignes 2 & 3 pour Karabiner) :

tell application "System Events"
    set visible of first process whose frontmost is 1 to 0
    delay 0.2
    set dTopSize to size of scroll area 1 of process "Finder" as list
    set maxPos to {0, 22}
    set realApp to first process whose frontmost is true
    set froAppName to (name of first process whose frontmost is true) as string
    set maxMin to true

    if (froAppName is "BBEdit") then
        set appBounds to {0, 22, 888, (item 2 of dTopSize) - 22}
    else if (froAppName is "Safari") then
        set appBounds to {38, 22, 1372, (item 2 of dTopSize) - 22}
    else if (froAppName is "Mail") then
        set appBounds to {53, 22, 1314, (item 2 of dTopSize) - 22}
    else
        set maxMin to false
    end if
    if maxMin then
        if item 1 of (size of window 1 of realApp as list) is not equal to ¬
        item 1 of dTopSize then
            set position of window 1 of realApp to maxPos
            set size of window 1 of realApp to {(item 1 of dTopSize), ¬
            (item 2 of dTopSize) - 22}
        else
            set size of window 1 of realApp to {item 3 of appBounds, ¬
            item 4 of appBounds}
            set position of window 1 of realApp to {item 1 of appBounds, ¬
            item 2 of appBounds}
        end if
    end if
    tell realApp to set frontmost to true
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