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.