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).
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 osascript
aplicaciones activate
cuando 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 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
dará como resultado que no suceda nada.
wch1zrosa
esfera de rubik
esfera de rubik
usuario3439894
esfera de rubik
usuario3439894
esfera de rubik
tell application "System Events"
línea, de modo que pueda elegir la aplicación que realiza la llamada que usa Systems Events?usuario3439894
esfera de rubik
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?