¿Cómo volver a trabajar un comando de "Eventos del sistema" en AppleScript, para que funcione automáticamente en todas las aplicaciones?

3

Con el siguiente código AppleScript dentro de una acción "Ejecutar AppleScript" en un Servicio:

tell application "System Events"
    set theSBounds to {{572, 64}, {332, 515}}
    set position of window "Google Hangouts - [email protected]" of application process "Google Chrome" to item 1 of theSBounds
    set size of window "Google Hangouts - [email protected]" of application process "Google Chrome" to item 2 of theSBounds
end tell

el Servicio solo funcionará si la aplicación desde la cual se ha llamado a ese Servicio se ha agregado a la lista de aplicaciones en "Permita que las aplicaciones a continuación controlen su computadora". Esta lista se encuentra en Preferencias del sistema → Seguridad y amp; Privacidad → Accesibilidad.

¿Es posible modificar el código AppleScript de alguna manera para que no sea necesario agregar todas las aplicaciones de la computadora a la lista? O, de modo que, solo se necesita agregar un elemento a la lista, a diferencia de cada aplicación en la computadora de uno?

Pensé que algo como esto podría funcionar:

do shell script "osascript -e 'tell application \"System Events\"' -e 'set theSBounds to {{572, 64}, {332, 515}}' -e 'set position of window \"Google Hangouts - [email protected]\" of application process \"Google Chrome\" to item 1 of theSBounds' -e 'set size of window \"Google Hangouts - [email protected]\" of application process \"Google Chrome\" to item 2 of theSBounds' -e 'end tell'" with administrator privileges

pero este código también requiere que la aplicación desde la que se ejecuta el Servicio se agregue a la lista de Accesibilidad.

Nota: solo quiero ejecutar este AppleScript como un servicio, y no en una aplicación creada por Automator, porque el código recibe el texto seleccionado como entrada (para todo el sistema).

    
pregunta rubik's sphere 04.02.2017 - 03:44

1 respuesta

2

He encontrado una solución aceptable (es decir, una solución).

Inserte el bloque de código "Eventos del sistema" en una acción "Ejecutar AppleScript" y guárdelo como su propio archivo de aplicación en Automator. Nota: La extensión de archivo de este código debe ser .app para que esto funcione (más sobre esto en un momento).

Vaya a Preferencias del sistema → Seguridad & Privacidad → pestaña Privacidad → Accesibilidad. Agregue y marque la aplicación recién creada en la lista de aplicaciones que tienen permiso para controlar su computadora.

Ejecute la aplicación recién creada desde su Servicio. Para hacerlo, puede agregar la siguiente línea a su código AppleScript:

do shell script "osascript -e 'tell application \"Application Name\" to activate'"

(Normalmente uso aplicaciones de osascript a activate cuando uso una acción "Ejecutar AppleScript" en un Servicio, ya que esto elude a bug con los Servicios que he descubierto .)

Su Servicio ahora debería funcionar perfectamente en todas las aplicaciones de su computadora, a pesar del hecho de que solo una aplicación (la que contiene el código de "Eventos del Sistema") ha recibido explícitamente el poder de controlar la computadora.

El archivo se debe guardar como un archivo .app, y no como un archivo .scpt o .applescript. Esto se debe a que no es posible agregar archivos .scpt o .applescript a la lista de aplicaciones permitidas para controlar su computadora; solo los archivos .app verdaderos pueden seleccionarse en el diálogo.

Tenga en cuenta que el archivo .app no tiene que crearse en Automator. Si crea el archivo .app en Script Editor.app y sigue los otros pasos, el archivo .app funcionará de la misma manera.

Sin embargo, hay una diferencia. Cuando se crea el archivo .app en Automator, se puede usar activate o launch para ejecutar la aplicación en su Servicio. Pero, cuando el archivo .app se crea en el Editor de secuencias de comandos, solo se puede usar activate para ejecutar la aplicación; launch resultará en que nada suceda.

    
respondido por el rubik's sphere 04.02.2017 - 16:59

Lea otras preguntas en las etiquetas