Applescript para hacer clic en el botón verde (zoom) con la opción hacia abajo

3

Basado en Applescript: el comando de activación hace que la aplicación sea "mitad" -activo ", escribí el siguiente código de Apple que me permitiría hacer clic en el botón verde (zoom) en la esquina superior izquierda de una ventana. Quiero aplicar el script a MacVim y otros que tienen el botón verde como "AXFullScreenButton". Sin embargo, la ejecución del script hace que la ventana pase a PANTALLA COMPLETA en lugar de una ventana "maximizada". ¿Alguien puede decir qué está mal?

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
    
pregunta T_T 05.03.2015 - 01:57

2 respuestas

5

Puedes usar una de las acciones del " AXFullScreenButton ":

  • " AXZoomWindow " acción para maximizar.
  • Acción " AXPress " a pantalla completa.

Usa el comando perform action , como este.

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
    
respondido por el jackjr300 18.12.2015 - 23:45
0

En caso de que uses una aplicación que NO reaccione a AXZoomWindow de manera estándar (como BBEdit) o que tengas diferentes configuraciones "favoritas" para ventanas de diferentes aplicaciones (me gusta Mail) menos ancho que Safari), escribí un script que maximiza la ventana frontal de una aplicación y lo REAJUSTA a sus preferencias individuales.

Aquí hay algunos problemas que resolví y tuve que resolver:
1.) "proceso frontal" cuando se llama en una secuencia de comandos es "Eventos del sistema" o "ScriptEditor" : establezca visible a 0.
(NO se aplica a los accesos directos de Karabiner).
2.) Max. Los valores del escritorio están definidos por size of scroll area 1 of process "Finder"
3.) La altura de la barra de menú en mi sistema es 22px, así que tuve que restarlos en varios lugares
4.) Combiné valores para posición y amp; tamaño en una variable mutua por aplicación - ¡Reemplaza con la tuya!
5.) Con el fin de direccionar solo las aplicaciones que desea "Zoom", hay "maxMin" para excluir a otros -
  agrega o elimina aplicaciones como quieras
6.) Por supuesto, deberá registrar el script / aplicación con "Acceso de asistencia" (Seguridad / Preferencias del sistema)
7.) O bien, ataje este script como un "Servicio" (a través de Automator) en Sys-Prefs, Teclado, atajos, ...
8.)… o use el ingenioso elemento clave Karabiner Remapper con una simple "modificación compleja":

"from": {"key_code": "m", "modifiers": {"mandatory": ["left_option"]} },
  "to": [{"shell_command": "osascript ~/.config/myScpts/maxMin_zoom.app"}], **
"type": "basic"  
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
(** path and name: your choice)    

que ofrece un atajo adecuado en el momento; me conformé con "Opt-M", ya que la mayoría de los combos "Z" están en uso.
Aquí está el guión (DELETE lines 2 & 3 for 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
    
respondido por el clemsam lang 26.11.2018 - 14:39

Lea otras preguntas en las etiquetas