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

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 - myemailaddress@gmail.com" of application process "Google Chrome" to item 1 of theSBounds
    set size of window "Google Hangouts - myemailaddress@gmail.com" of application process "Google Chrome" to item 2 of theSBounds
end tell

el Servicio solo funcionará si la aplicación desde la que se llamó a ese Servicio se ha agregado a la lista de aplicaciones en "Permitir que las siguientes aplicaciones controlen su computadora". Esta lista se encuentra en Preferencias del sistema → Seguridad y privacidad → Accesibilidad.

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

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 - myemailaddress@gmail.com\" of application process \"Google Chrome\" to item 1 of theSBounds' -e 'set size of window \"Google Hangouts - myemailaddress@gmail.com\" 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 servicio, y no en una aplicación creada por Automator, porque el código recibe texto seleccionado como entrada (en todo el sistema).

¿Está decidido a usar ese script como un servicio? ¿Por qué no simplemente guardar el script como una aplicación a través del editor de scripts? Entonces solo necesita agregar esa aplicación para permitir la accesibilidad en las preferencias del sistema. Luego, puede dar un paso más y hacer que la aplicación se pueda hablar y ejecutarla cuando lo desee con un comando de dictado.
Gracias por la sugerencia. No quería publicar el código completo, ya que no está relacionado con mi pregunta, pero en él, vería que el código acepta el texto resaltado actualmente como su entrada. Aparte de copiar primero el texto seleccionado en el portapapeles, un AppleScript como archivo de aplicación no puede acceder a la selección. Además, desconozco incluso un programa de terceros que pueda obtener el texto seleccionado y enviarlo como una variable a un AppleScript.
En cuanto al segundo punto, en un momento fui un (breve) usuario de la función de Comandos de dictado de Mac. Pero finalmente descubrí que no era lo suficientemente confiable para usar. Si mi habla no activa el dictado incluso solo el 10 % de las veces, simplemente es más fácil (en mi opinión) iniciar la aplicación desde la barra de menú o mediante un método abreviado de teclado que confiar en que mi dictado se escuche correctamente.
Ese es uno de los inconvenientes de la automatización, ya que uno tiene que dar permiso para cada aplicación que controla la computadora a través de un proceso de automatización. Así que tendrás que agregar aplicaciones según sea necesario. Estoy seguro de que esa no es la respuesta que quería escuchar, pero ¿responde eso a la pregunta que hizo, o no entiendo lo que está preguntando?
@ user3439894 Creo que lo estás entendiendo correctamente. Aquí hay otra forma en que puedo plantear mi pregunta: ¿Existe un sustituto para "Eventos del sistema" que pueda usar para lograr el mismo efecto? El problema con "Eventos del sistema" en AppleScript es que en realidad usa cualquier aplicación que uno tenga abierta actualmente para ejecutar el comando, en lugar de usar la aplicación "Eventos del sistema" para ejecutar el comando (ubicada en /System/Library/CoreServices/ Eventos del sistema.app).
Esfera de @rubik. El problema es que System Events no es el proceso de llamada, la aplicación más visible es la que realiza la llamada y, como tal, necesita permiso. No sé de ninguna manera de cambiar eso. Dicho esto, no significa que no lo haya, simplemente no lo sé, pero mi experiencia me dice que probablemente no haya una manera fácil, incluso si la hubiera. Porque tendrías que eludir las medidas de seguridad que Apple ha implementado intencionalmente. Apple no va a publicar abiertamente cómo evitarlo. Entonces, como usuario, elige usar la automatización y los riesgos de seguridad que conlleva o no usar la automatización.
@ usuario3439894 Interesante. ¿Hay alguna manera de configurar la aplicación más visible antes de la tell application "System Events"línea, de modo que pueda elegir la aplicación que realiza la llamada que usa Systems Events?
Esfera de @rubik, en mi cabeza diría que no, porque necesita eventos del sistema para obtener el nombre del primer proceso de aplicación cuyo primer plano es verdadero.
@ user3439894 Tengo una pregunta relacionada. ¿Por qué para algunos comandos de eventos del sistema (p. ej., tell application "System Events" to set frontmost of process "TextEdit" to true), no es necesario otorgar acceso a la aplicación frontal más visible para que funcione el comando de eventos del sistema, pero para otros comandos de eventos del sistema (como el de mi pregunta), ¿es necesario otorgar acceso?

Respuestas (1)

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

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 y privacidad → pestaña Privacidad → Accesibilidad. Agregue y marque la aplicación recién creada a la lista de aplicaciones permitidas 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'"

(Usualmente uso osascriptaplicaciones activatecuando uso una acción "Ejecutar AppleScript" en un Servicio, ya que esto evita un error con los Servicios que descubrí ).

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

El archivo debe guardarse 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 se pueden seleccionar archivos .app verdaderos en el cuadro de 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 el archivo .app se crea en Automator, se puede usar activateo launchpara 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 activatepara ejecutar la aplicación; launchdará como resultado que no suceda nada.

¡No olvides marcar esto como la respuesta aceptada! :) +1 para una buena solución!
Gracias. Obtuve un error diferente si intenté activar un flujo de trabajo, pero su trabajo aún parece funcionar.