Accessing dock icon right-click menu items with AppleScript

后端 未结 5 665
醉酒成梦
醉酒成梦 2020-12-16 23:39

Is there any way to get an AppleScript to access the menu items that come up when you right click on a dock icon?

Specifically, here\'s what I want to do:

I

相关标签:
5条回答
  • 2020-12-17 00:08

    As a variation to the most upvoted answer, here's a version of the script that accepts the name of the menu item, which lets you avoid having to do any counting.

    This example clicks "Go to Folder..." from Finder's dock menu.

    tell application "Dock"
        activate
    end tell
    tell application "System Events"
        tell process "Dock"
            set frontmost to true
            activate
            tell UI element "Finder" of list 1
                perform action "AXShowMenu"
                click menu item "Go to Folder…" of menu "Finder"
            end tell
        end tell
    end tell
    
    0 讨论(0)
  • 2020-12-17 00:11

    The Chromium nightly builds now contain AppleScript support, and this should make it into Chrome before long. It means you can now do:

    tell application "Chromium"
        make new window
        activate
    end tell
    
    0 讨论(0)
  • 2020-12-17 00:14

    For anyone who is interested, I think I've got a reasonable working solution to this problem, but it doesn't involve right-clicking on dock icons.

    First, you have to uncheck "When switching to an application, switch to a space with open windows for the application" in the Spaces preference pane of System Preferences. Then I wrote the following AppleScript:

    tell application "Google Chrome" to activate
    
    tell application "System Events"
        tell process "Google Chrome"
            try
                set var to get name of window 1
            on error
                set var to "no window exists!!!"
            end try
        end tell
    end tell
    
    if var is "no window exists!!!" then
        tell application "System Events"
            tell process "Google Chrome"
                click menu item "New Window" of menu "File" of menu bar 1
            end tell
        end tell
    else
        tell application "System Events"
            tell process "Google Chrome"
                click menu item "New Tab" of menu "File" of menu bar 1
            end tell
        end tell
    end if
    

    I launch this AppleScript using Spark, which allows me to assign a shortcut key to it.

    It's a little bit slow, particularly when the system is under a load, but usually doesn't take longer than a second or so to run. It also avoids the problem I was having with Firefox, where I would end up with dozens of windows open at the end of the day.

    0 讨论(0)
  • 2020-12-17 00:35

    Not sure if you are still interested but...

     tell application "Dock"
        activate
    end tell
    tell application "System Events"
        tell process "Dock"
            set frontmost to true
            activate
            tell list 1
                perform action "AXShowMenu" of UI element "Google Chrome"
                delay 1
                repeat 4 times -- count number of items to the one you want
                    key code 126 -- up arrow
                    -- key code 125 -- down arrow
                end repeat
                delay 1
                repeat 2 times
                    key code 36 -- return key
                end repeat
            end tell
        end tell
    end tell
    
    0 讨论(0)
  • 2020-12-17 00:35

    Alternatively you could also invoke this hidden option:

    defaults write com.apple.dock workspaces-auto-swoosh -bool NO
    killall Dock
    

    It also has the, for me, positive effect that you aren't thrown around on desktops anymore when switching applications. Simply do Cmd+N with Chrome as the active app.

    Btw you can go to spaces directly with Fn+1, Fn+2 etc. if you set it up instead of ⌃1, ⌃2 etc. You have to make the spaces before the keyboard shortcuts can be set in Keyboard -> Shortcuts preferences.

    0 讨论(0)
提交回复
热议问题