OS X:访问最前面的应用程序的主菜单

时间:2013-01-17 19:00:13

标签: macos applescript scripting-bridge

--- ---编辑

有一个名为Keycue的应用程序可以执行此功能。

--- /编辑---

---编辑编辑---

这是重复的。 Get a list of all shortcuts from another application

--- /编辑编辑---

我正在努力编写一个应用程序来获取最前面的应用程序的菜单栏(例如,如果Safari已打开,Safari模板,如果XCode打开,Xcode菜单),并从中解析快捷方式。

到目前为止,我尝试过的事情都失败了:

1:花了一周时间学习苹果。玩“系统事件”来获取菜单栏,但是我没有收集任何可以给我快捷代码的信息。

2:考虑使用NSWorkspace尝试KVO。尝试获取NSRunningApplication,但只有一个ownsMenuBar属性,它是BOOL,而不是NSMenu。

3:尝试从NSWorkspace,NSBundle和NSRunningApplication获取NSApplication。一切都没有用。

4:试图从AppleScript获取NSMenu(没有成功。)

我认为我想尝试的下一件事是搜索带有ownsMenuBar的YES的NSRunningApplication,然后尝试从某处获取相应的NSApplication。不知道在哪里。

所以有什么建议吗?

1 个答案:

答案 0 :(得分:2)

尝试:

tell application "System Events"
    set frontProcess to name of first process whose frontmost = true
    tell process frontProcess
        get every menu item of menu 1 of menu bar item 2 of menu bar 1
    end tell
end tell

EDIT
获得此列表后,您可以解析每个菜单项的属性:

tell application "System Events"
    set frontProcess to name of first process whose frontmost = true
    tell process frontProcess
        set myMenuItems to get every menu item of menu 1 of menu bar item 2 of menu bar 1
        set myList to {}
        repeat with aMenuItem in myMenuItems
            set end of myList to aMenuItem's name
            set end of myList to value of aMenuItem's attribute "AXMenuItemCmdChar"
            set end of myList to value of aMenuItem's attribute "AXMenuItemCmdModifiers"
        end repeat
    end tell
end tell