Come posso accedere alla voce della barra dei menu in Bartender 3 usando AppleScript?

0

Per il software nella barra dei menu in alto a destra, posso usare il seguente AppleScript per accedere agli elementi della barra dei menu come questo

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

Questo AppleScript mi aiuta a connettermi al mio AirPods. Ma se metto l'oggetto bluetooth in Bartender 3, non funziona. Cosa devo aggiungere nei codici per ottenere l'accesso all'elemento in Barman?

    
posta Patrick 07.01.2018 - 08:08
fonte

1 risposta

1

Sto raccogliendo dalla tua formulazione che vuoi accedere a una voce di menu di Barman 3 che si trova nella barra dei menu più o meno allo stesso modo della mia app Dropbox fa:

Sperodiaverlofattocorrettamente,nonavendoBartendermestesso.Tuttavia,capirecomeaccedereallavocedimenuusandoAppleScriptnonètroppodifficile.Comegiàfatto,useremoloscriptingGUIperfareciò,quindiassicuraticheScriptEditorabbiailpermessodicontrollareiltuocomputerinPreferenzediSistema>Sicurezzaeamp;Privacy>Privacy>Accessibilità(MacOSHighSierra).

PoichénonhoBartendermestesso,hobisognochetufacciaqualchelavoroinvestigativoinAppleScriptperme(maèunabuonapratica,vistochetimostracomerisolvereproblemicomequestoinfuturo):

Parte1:accessoall'iconadelmenu

Eseguiquestocomando:

tellapplication"System Events" to get every process whose name contains "bartender"

Ho eseguito un comando simile a "dropbox" e l'ho restituito:

    --> {application process "Dropbox", 
         application process "DropboxActivityProvider"}

Immagino che il barman avrà anche uno o due processi al massimo. Uno di questi è probabilmente chiamato "Barista". Scegli quello, a meno che l'altro abbia un nome ovviamente utile, come "BartenderMenu" (ne dubito).

Ora esegui questo, sostituendo il nome del processo appropriato (che è case-sensitive ):

tell application "System Events" to tell process "Bartender" to get every menu bar

Si spera che restituisca questo:

    --> {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 è la barra dei menu che contiene il Menu Apple ( ) in alto a sinistra. menu bar 2 (se esiste) sarà la barra dei menu contenente l'icona dell'applicazione.

Ora dovresti essere in grado di indirizzare l'icona di quel menu con questo comando:

tell application "System Events" to tell process "Bartender" to ¬
    click menu bar item 1 of menu bar 2

Spero che questo dovrebbe risolverti. Per completezza, ecco un lavoro a una riga che ottiene tutte le app della barra dei menu in una volta sola:

tell application "System Events" to get menu bar 2 of every process

Restituirà un arrangiamento, la maggior parte dei quali articoli sarà missing value (che rappresenta i processi che non hanno una seconda barra dei menu, gli unici che fanno le app della barra dei menu). Tra quei valori mancanti ci saranno i nomi delle app che si trovano in alto, e probabilmente puoi semplicemente scegliere "Bartender" (o qualunque cosa verrà chiamato) immediatamente usando questo metodo.

Parte 2: accesso al menu e alle sue voci di menu

Se, quando normalmente fai clic sull'icona del menu app per Bartender , viene visualizzato un menu, quindi ti consigliamo di sapere come accedere a tali voci di menu anche da AppleScript.

Il menu stesso non esiste fino a l'icona è stata cliccata e viene visualizzato il menu. Il menu stesso è (o sarà) chiamato menu 1 . Le sue singole voci di menu sono chiamate menu items e fanno riferimento al loro nome (che è il testo dell'elemento di menu stesso, ad esempio "Esci da Bartender 3" ).

Ecco il comando che accederà al menu:

tell application "System Events" to tell process "Bartender" to ¬
    get menu items of menu 1 of menu bar item 1 of menu bar 2

Tuttavia , devi prima introdurre il menu, altrimenti genererà un errore o restituirà missing value . Pertanto, esegui il comando per fare prima clic sull'icona del menu app, quindi esegui quella:

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

E, analogamente, puoi inviare un comando click a una voce di menu di tua scelta facendo riferimento al suo nome:

click menu item "Quit Bartender 3" of menu 1

(opportunamente racchiuso nelle relative dichiarazioni / blocchi tell ).

Finalmente: quel fastidioso ritardo

Fastidiosamente, ci sarà un ritardo di 5 secondi tra l'emissione di un comando click e il recupero dell'elenco di voci di menu. Non so perché, ma so che si tratta di un problema standard segnalato da altri utenti. Ecco il problema sollevato su Stack Overflow insieme alla presunta soluzione di qualcuno per il problema (non l'ho ancora testato io stesso).

Per qualsiasi domanda o problema, lascia un commento e farò del mio meglio per aiutarti.

    
risposta data 07.01.2018 - 16:02
fonte

Leggi altre domande sui tag