A partir de su texto, me estoy dando cuenta de que desea acceder a un elemento del menú de Bartender 3 que se encuentra en la barra de menú de la misma forma que mi aplicación Dropbox hace:
Ojalátetengaestecorrectamente,noteniendoaBartenderyomismo.Sinembargo,descubrircómoaccederalelementodelmenúutilizandoAppleScriptnoesdemasiadodifícil.Comoyalohahecho,usaremossecuenciasdecomandosGUIparahaceresto,asíqueasegúresedequeScriptEditortengapermisoparacontrolarsucomputadorabajoPreferenciasdelsistema>Seguridadyamp;Privacidad>Privacidad>Accesibilidad(MacOSHighSierra).
ComonotengoBartender,necesitoquehagauntrabajodedetectiveenAppleScriptparamí(peroesunabuenapráctica,yaquelemuestracómoresolverproblemascomoesteenelfuturo).):
Parte1:accesoaliconodelmenú
Ejecutaestecomando:
tellapplication"System Events" to get every process whose name contains "bartender"
Ejecuté un comando similar para "dropbox" y devolví esto:
--> {application process "Dropbox",
application process "DropboxActivityProvider"}
Me imagino que Bartender también tendrá uno o dos procesos como máximo. Uno de ellos probablemente se llama "Bartender". Elija ese, a menos que el otro tenga un nombre obviamente útil, como "BartenderMenu" (lo dudo).
Ahora ejecute esto, sustituyendo el nombre del proceso apropiado (que es distingue entre mayúsculas y minúsculas ):
tell application "System Events" to tell process "Bartender" to get every menu bar
Esperemos que devuelva esto:
--> {menu bar 1 of application process "Bartender" of application "System Events",
menu bar 2 of application process "Bartender" of application "System Events"}
menu bar 1
es la barra de menú que contiene el Menú Apple ( ) en la parte superior izquierda. menu bar 2
(si existe) será la barra de menú que contiene el ícono de la aplicación.
Ahora debería poder apuntar a ese icono del menú con este comando:
tell application "System Events" to tell process "Bartender" to ¬
click menu bar item 1 of menu bar 2
Espero que eso te solucione. Para completar, aquí hay un trabajo de una línea que obtiene todas las aplicaciones de la barra de menú de una sola vez:
tell application "System Events" to get menu bar 2 of every process
Devolverá un arreglo, la mayoría de cuyos elementos serán missing value
(que representan procesos que no tienen una segunda barra de menús; los únicos que lo hacen son las aplicaciones de la barra de menús). Entre esos valores faltantes se encontrarán los nombres de las aplicaciones que se ubican en la parte superior, y probablemente solo puedas seleccionar "Bartender" (o como se llame) usando este método.
Parte 2: acceso al menú y sus elementos del menú
Si, cuando normalmente hace clic en el ícono de la aplicación de menú para Bartender , muestra un menú, entonces también querrá saber cómo acceder a esos elementos de menú desde AppleScript.
El menú en sí no existe hasta que se haya hecho clic en el icono y aparezca el menú. El menú en sí es (o será) llamado menu 1
. Sus elementos de menú individuales se denominan menu items
y están referenciados por su nombre (que es el texto del propio elemento de menú, por ejemplo, "Salir de Bartender 3" ).
Aquí está el comando que accederá al menú:
tell application "System Events" to tell process "Bartender" to ¬
get menu items of menu 1 of menu bar item 1 of menu bar 2
Sin embargo , primero debe crear el menú, de lo contrario, solo generará un error o devolverá missing value
. Por lo tanto, ejecute el comando para hacer clic en el ícono de la aplicación del menú primero, luego ejecute ese:
tell application "System Events" to tell process "Bartender" to ¬
tell menu bar item 1 of menu bar 2
click
get menu items of menu 1
end tell
Y, de manera similar, puede emitir un comando click
a un elemento del menú de su elección haciendo referencia a su nombre:
click menu item "Quit Bartender 3" of menu 1
(encerrado adecuadamente en las instrucciones / bloques tell
relevantes).
Finalmente: Ese retraso molesto
De forma molesta, habrá un retraso de 5 segundos entre la emisión de un comando click
y la recuperación de la lista de elementos del menú. No sé por qué, pero sí sé que es un problema estándar que otros usuarios informan. Aquí el problema se ha planteado en Desbordamiento de pila junto con la supuesta solución de alguien para el problema (no lo he probado yo mismo).
Cualquier pregunta o problema, deje un comentario y haré todo lo posible para ayudar.