Wie können Sie in AppleScript oder JavaScript auf einen Menüpunkt klicken?

Ich muss ein Design mit einem Skript für Mojave, Alfred und Sourcetree ändern. Ich habe dies bereits erfolgreich mit Mojave und Alfred mit diesem Skript gemacht:

var alfredLightTheme = "Alfred"
var alfredDarkTheme = "Alfred Dark"

function run(args) {
    args = args ? args : []
    var systemEvents = Application("System Events")
    var alfred = Application("Alfred 3")

    if (args && args == 'dark') {
        systemEvents.appearancePreferences.darkMode = true
        alfred.setTheme(alfredDarkTheme)
    } else if (args && args == 'light') {
        systemEvents.appearancePreferences.darkMode = false
        alfred.setTheme(alfredLightTheme)
    } else {
        systemEvents.appearancePreferences.darkMode = !systemEvents.appearancePreferences.darkMode()
        alfred.setTheme(systemEvents.appearancePreferences.darkMode() ? alfredDarkTheme : alfredLightTheme)
    }

}

Für Sourcetree muss ich anscheinend auf die Menüelemente klicken, aber wie kann ich das tun?

Quellbaum-Änderungsthema

Antworten (1)

Da das OP sowohl mit AppleScript als auch mit JavaScript gekennzeichnet ist und es sich um zwei völlig getrennte Sprachen handelt und nicht ausdrücklich und ausdrücklich angegeben wurde, dass die Lösung nur in JavaScript vorliegen muss , hier ein Code , der funktionieren sollte. Ich sage "sollte funktionieren", weil es mit den getesteten Anwendungen funktioniert, aber ich habe Sourcetree nicht installiert, um explizit und speziell damit zu testen.

AppleScript -Code :

tell application "Sourcetree" to activate
delay 1
tell application "System Events"
    click menu item ¬
        "Dark" of menu 1 of menu item ¬
        "Theme" of menu 1 of menu bar item ¬
        "View" of menu bar 1 of application process "Sourcetree"
end tell

Hinweis: Der Wert des delay Befehls muss möglicherweise für Ihr System angepasst werden.


JavaScript- Code :

menuItemClick("Sourcetree", ['View', 'Theme', 'Dark'])

function menuItemClick(strAppName, lstMenuPath) {
    var oApp = Application(strAppName),
        lngChain = lstMenuPath.length,
        blnResult = false;

    if (lngChain > 1) {

        var appSE = Application("System Events"),
            lstApps = appSE.processes.where({
                name: strAppName
            }),
            procApp = lstApps.length ? lstApps[0] : null;

        if (procApp) {
            oApp.activate();
            var strMenu = lstMenuPath[0],
                fnMenu = procApp.menuBars[0].menus.byName(strMenu),
                lngLast = lngChain - 1;

            for (var i = 1; i < lngLast; i++) {
                strMenu = lstMenuPath[i];
                fnMenu = fnMenu.menuItems[strMenu].menus[strMenu];
            }


            fnMenu.menuItems[
                lstMenuPath[lngLast]
            ].click();
            blnResult = true;
        }
    }
    return blnResult;
}

Hinweis: Der JavaScript- Code stammt von jxaClickAppSubMenuItem.applescript von bumaociyuan und wurde von RobTrew/jxaClickAppSubMenuItem.applescript geforkt .