Con el siguiente código de AppleScript dentro de una acción "Run 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 cual se ha llamado ese Servicio se ha agregado a la lista de aplicaciones bajo "Permitir que las aplicaciones a continuación controlen tu ordenador." Esta lista se encuentra en Preferencias del Sistema Seguridad y Privacidad Accesibilidad.
¿Es posible modificar de alguna manera el código de AppleScript para que no sea necesario agregar cada aplicación en la lista? ¿O solo se 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 cual 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 con Automator, porque el código recibe texto seleccionado como entrada (en todo el sistema).
0 votos
¿Estás decidido a usar ese script como un servicio? ¿Por qué no simplemente guardas el script como una aplicación a través del editor de scripts? Luego solo necesitas agregar esa única aplicación para permitir accesibilidad en las preferencias del sistema. Luego puedes ir un paso más allá y hacer que la aplicación sea hablable y lanzarla cuando quieras con un comando de dictado.
0 votos
Gracias por la sugerencia. No quería publicar el código completo, ya que no está relacionado con mi pregunta, pero en él, verías que el código acepta el texto actualmente resaltado como entrada. A menos que primero copies el texto seleccionado al portapapeles, un archivo de aplicación de AppleScript no puede acceder a la selección. Además, desconozco siquiera un programa de terceros que pueda obtener el texto seleccionado y enviarlo como variable a un AppleScript.
0 votos
En el segundo punto, en un momento, fui un usuario (breve) de la función de Comandos de Dictado de Mac. Sin embargo, eventualmente encontré que no era lo suficientemente confiable para usar. Si mi habla no logra activar el dictado incluso solo el 10% del tiempo, simplemente es más fácil (IMHO) iniciar la aplicación desde la barra de menú o por medio de un atajo de teclado que depender de que mi dictado sea escuchado correctamente.
0 votos
Eso es una de las desventajas de la automatización en el sentido de que uno tiene que dar permiso para cada aplicación que controla la computadora a través de un proceso de automatización. Entonces tendrás que agregar aplicaciones según sea necesario. Estoy seguro de que esa no es la respuesta que querías escuchar, pero ¿esa respuesta responde a la pregunta que hiciste, o es que no estoy comprendiendo lo que estás preguntando?
0 votos
@user3439894 Creo que estás entendiendo correctamente. Aquí hay otra forma en la que puedo formular mi pregunta: ¿Existe un sustituto para "System Events" que pueda utilizar para lograr el mismo efecto? El problema con "System Events" en AppleScript es que en realidad utiliza la aplicación que uno tiene abierta en ese momento para ejecutar el comando, en lugar de utilizar la aplicación "System Events" para ejecutar el comando (ubicada en /System/Library/CoreServices/System Events.app).
0 votos
@ esfera de rubik, El problema es que Eventos del Sistema no es el proceso que llama, la aplicación más visible en primer plano es la que realiza la llamada y, por lo tanto, necesita permiso. No conozco ninguna forma de cambiar eso. Dicho esto, no significa que no la haya, simplemente no la conozco, pero mi experiencia me dice que probablemente no haya una forma 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 evadirlo. Entonces, como usuario, tienes que elegir entre usar la automatización y los riesgos de seguridad que conlleva, o no usar la automatización.
0 votos
@user3439894 Interesante. ¿Hay alguna forma de establecer la aplicación más visible en primer plano antes de la línea
tell application "System Events"
, para que pueda elegir la aplicación que llama a la que utiliza Systems Events?0 votos
@esfera de Rubik, De entrada, diría que no, porque necesitas Eventos del Sistema para obtener el nombre del primer proceso de aplicación cuyo frente es verdadero.
0 votos
@user3439894 Tengo una pregunta relacionada. ¿Por qué sucede que para algunos comandos de System Events (por ejemplo:
tell application "System Events" to set frontmost of process "TextEdit" to true
), no es necesario otorgar acceso a la aplicación más visible de primer plano para que funcione el comando de System Events, pero para otros comandos de System Events (como el de mi pregunta), sí es necesario otorgar acceso?