AppleScript, establece la posición de la ventana frontal, incluso si no es AppleScriptable

0

Estoy intentando escribir un script para centrar la ventana frontal de la aplicación activa, cuando selecciono este AppleScript del menú Script en la barra de menú. Debería funcionar con cualquier aplicación, incluidas las aplicaciones no compatibles con scripts.

Cuando ejecuto esto desde Script Editor, funciona bien. Si selecciono la aplicación actual u otra aplicación desde el menú de la aplicación "tell" en el Editor de secuencias de comandos, todavía se ve que la Editor de secuencias de comandos es la aplicación principal y mueve esa ventana en consecuencia. (También he depurado asignando manualmente el nombre de otra aplicación a currentApplication , incluida una aplicación que no admite scripts, y eso también funciona bien).

El problema parece ser cuando el script se ejecuta desde el elemento del menú Script. He depurado mostrando una notificación con el texto de currentApplication , y cada vez que muestra el nombre de la aplicación más avanzada, como se esperaba. Sin embargo, no mueve la posición de la ventana. ¿Qué da?

-- Get name of the current application and its front window
tell application "System Events"
    set activeApps to name of application processes whose frontmost is true
    set currentApplication to item 1 of activeApps
    -- DEBUG -- currentApplication seems to be the correct application
    -- display notification currentApplication
    -- activate currentApplication
    -- Get the front window and its measurements
    set frontWindow to the first window of application process currentApplication
    set windowSize to size of frontWindow
    set windowPosition to position of frontWindow
end tell

-- Get the bounds of the screen
tell application "Finder"
    set screenBounds to bounds of window of desktop
end tell

--calculate the center of the current window
set windowSizeX to item 1 of windowSize
set windowSizeY to item 2 of windowSize
set windowCenterX to windowSizeX / 2
set windowCenterY to windowSizeY / 2

-- calculate the center of the screen
set screenCenterX to (item 3 of screenBounds) / 2
set screenCenterY to (item 4 of screenBounds) / 2

--calculate the new window position
set newWindowPositionX to screenCenterX - windowCenterX
set newWindowPositionY to screenCenterY - windowCenterY

-- set the new window position
tell application "System Events"
    set position of frontWindow to {newWindowPositionX, newWindowPositionY}
end tell
    
pregunta bobtiki 26.11.2018 - 01:53

1 respuesta

0

La respuesta fue permitir que SystemUIServer.app controle la computadora, en Seguridad > Privacidad > Accesibilidad preferencias. Tenía tantas ventanas del Finder abiertas, solo puedo asumir que el diálogo de advertencia estaba apareciendo detrás de ellas. Una vez que se concede el permiso, funciona bien.

    
respondido por el bobtiki 26.11.2018 - 05:00

Lea otras preguntas en las etiquetas