El ejemplo AppleScript código que se muestra a continuación, se probó de tres maneras diferentes, ejecutado en script Editor , ejecutado como un sistema autónomo AppleScript aplicación y se ejecuta como un Automatizador Servicio/Acción Rápida en MacOS Mojave con Lengua y región ajustes en Preferencias del sistema ajustado a Inglés (EE.UU.) - Primaria y me ha funcionado sin problemas 1 .
- 1 Asume la configuración necesaria y adecuada en <strong>Preferencias del sistema </strong>> <strong>Seguridad y privacidad </strong>> <strong>Privacidad </strong>se han fijado/abordado según las necesidades.
Ejemplo AppleScript código :
ignoring application responses
tell application "System Events" to ¬
click menu bar item 1 of ¬
menu bar 2 of ¬
application process "Enjoyable"
end ignoring
delay 0.1
do shell script "killall 'System Events'"
delay 0.2
tell application "System Events"
launch
click menu item 1 of ¬
menu 1 of ¬
menu bar item 1 of ¬
menu bar 2 of ¬
application process "Enjoyable"
end tell
Notas:
Utilizando Inspector de accesibilidad , una parte de Xcode revela que no hay acción asignado a menu bar item 1 of menu bar 2 of application process "Enjoyable"
y es probablemente por lo que se cuelga con el original código cómo lo has probado.
Para evitar el retraso de 5 ~ 6 segundos utilizando ignoring application responses
Envolví la primera tell application "System Events"
comando con una sola tarea que realizar, lo que permitió a los script para proceder, y luego matar el Eventos del sistema proceso de solicitud permite la segunda tell application "System Events"
comando para realizar sus tareas con el mínimo retraso de ~1 segundo combinado para el funcionamiento de todo el script . Por supuesto, esto es mucho mejor que el retraso de 5 ~ 6 segundos sin hacerlo de esta manera.
El muy pequeño delay
comandos antes y después del do shell script "killall 'System Events'"
comando son para dar tiempo a la elemento de la barra de menús para mostrar su menú y para Eventos del sistema para terminar antes de llamarlo de nuevo para pulsar el objetivo elemento del menú . El valor de la delay
comando puede necesitar un ligero ajuste y, si es así, hágalo como sea necesario.
Como se mencionó anteriormente, esto funcionó para mí sin problemas 1 Sin embargo, si por alguna razón el ejemplo AppleScript código que se muestra arriba, no funciona para usted, entonces aquí hay una forma programática de hacer clic en el objetivo elemento de la barra de menús en el barra de menús utilizando el cliclick
o MouseTools
utilidad de terceros .
- Tengo
cliclick
y MouseTools
situado en /usr/local/bin/
Así que cámbialo en el código si los tiene ubicados en otro lugar.
Usando: clicks
Ejemplo AppleScript código :
tell application "System Events" to ¬
set thePositionSizeList to ¬
the {position, size} of ¬
menu bar item 1 of ¬
menu bar 2 of ¬
application process "Enjoyable"
set xPos to ¬
(item 1 of item 1 of thePositionSizeList) + ¬
(item 1 of item 2 of thePositionSizeList) / 2 ¬
as integer
set yPos to ¬
(item 2 of item 1 of thePositionSizeList) + ¬
(item 2 of item 2 of thePositionSizeList) / 2 ¬
as integer
set shellCMD to {¬
"/usr/local/bin/cliclick -r c:", ¬
xPos, ",", yPos, " w:50 c:", ¬
xPos, ",", (yPos + 22)} as string
do shell script shellCMD
Notas:
Con cliclick
se pueden encadenar múltiples eventos juntos y por qué el código termina en el do shell script shellCMD
comando ya que hace clic tanto en el elemento de la barra de menús y el elemento del menú especialmente porque es la primera elemento del menú que es el objetivo.
cliclick
está disponible como ejecutable binario precompilado , fuente código y también se puede instalar con Homebrew .
El actual ejecutable binario precompilado liberación de cliclick
(5.0) no funcionará en MacOS Mojave y utilicé una versión más antigua que ya tenía (versión 4.0.1, publicada el 2018-04-10). Si no puedes adquirir una versión anterior puedes utilizar MouseTools
en su lugar.
Utilizando: MouseTools
Ejemplo AppleScript código :
tell application "System Events" to ¬
set thePositionSizeList to ¬
the {position, size} of ¬
menu bar item 1 of ¬
menu bar 2 of ¬
application process "Enjoyable"
set xPos to ¬
(item 1 of item 1 of thePositionSizeList) + ¬
(item 1 of item 2 of thePositionSizeList) / 2 ¬
as integer
set yPos to ¬
(item 2 of item 1 of thePositionSizeList) + ¬
(item 2 of item 2 of thePositionSizeList) / 2 ¬
as integer
set shellCMD to {¬
"/usr/local/bin/MouseTools -x ", ¬
xPos, " -y ", yPos, " -leftClick"} as string
do shell script shellCMD
delay 0.2
tell application "System Events" to ¬
click menu item 1 of ¬
menu 1 of ¬
menu bar item 1 of ¬
menu bar 2 of ¬
application process "Enjoyable"
Notas:
Con MouseTools
sólo se puede realizar una evento a la vez y por qué después de hacer clic en el elemento de la barra de menús en el barra de menús Acabo de volver a usar Eventos del sistema para hacer clic en el objetivo elemento del menú , frente a la llamada MouseTools
una segunda vez, ya sea dentro de la primera do shell script
comando o una segunda do shell script
comando posiblemente tras un breve retraso.
Por ejemplo, podría cambiar el shellCMD
a:
set shellCMD to {¬
"/usr/local/bin/MouseTools -x ", ¬
xPos, " -y ", yPos, " -leftClick;", ¬
"/usr/local/bin/MouseTools -x ", ¬
xPos, " -y ", (yPos + 22), " -leftClick"} as string
A continuación, elimine todo lo que hay después del do shell script
comando .
MouseTools
está disponible como ejecutable binario precompilado y la fuente código .
Nota: El <em>ejemplo </em><strong>AppleScript </strong><em>código </em>es sólo eso y sin ningún tipo de inclusión <em>tratamiento de errores </em>no contiene ningún otro <em>tratamiento de errores </em>según corresponda. Corresponde al usuario añadir cualquier <em>tratamiento de errores </em>como sea apropiado, necesario o deseado. Eche un vistazo a la <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-129232" rel="nofollow noreferrer"><strong>intente </strong></a><em>declaración </em>y <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-129657" rel="nofollow noreferrer"><strong>error </strong></a><em>declaración </em>en el <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html" rel="nofollow noreferrer"><strong>Guía del lenguaje AppleScript </strong></a>. Véase también, <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_error_xmpls.html#//apple_ref/doc/uid/TP40000983-CH221-SW1" rel="nofollow noreferrer"><strong>Trabajar con errores </strong></a>. Además, el uso del <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_cmds.html#//apple_ref/doc/uid/TP40000983-CH216-SW10" rel="nofollow noreferrer"><strong>retraso </strong></a><em>comando </em>puede ser necesario entre eventos cuando sea apropiado, por ejemplo <code>delay 0.5</code> con el <em>valor </em>de la <em>retraso </em>ajustado apropiadamente.