¿Cómo puedo obtener acceso al elemento de la barra de menú en Bartender 3 utilizando AppleScript?

0

Para el software en la barra de menú superior derecha, puedo usar el siguiente AppleScript para acceder a los elementos de la barra de menú como este

activate application "SystemUIServer"
set deviceName to "Somebody’s AirPods"

tell application "System Events"
    tell process "SystemUIServer"
        set bluetoothMenu to (menu bar item 1 of menu bar 1 whose description contains "bluetooth")
        tell bluetoothMenu
            click

            set deviceMenuItem to (menu item deviceName of menu 1)
            tell deviceMenuItem
                click

                if exists menu item "Connect" of menu 1 then
                    click menu item "Connect" of menu 1
                    return "Connecting..."
                else
                    set batteryLevelMenuItem to (menu item 3 of menu 1)
                    tell batteryLevelMenuItem
                        set batteryLevelText to title of batteryLevelMenuItem
                    end tell

                    key code 53 -- esc key

                    return batteryLevelText
                end if
            end tell
        end tell
    end tell
end tell

Este AppleScript me ayuda a conectarme a mis AirPods. Pero si pongo el artículo de bluetooth en Bartender 3, no funciona. ¿Qué debo agregar en los códigos para obtener acceso al artículo en Bartender?

    
pregunta Patrick 07.01.2018 - 08:08

1 respuesta

1

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.

    
respondido por el CJK 07.01.2018 - 16:02

Lea otras preguntas en las etiquetas