7

我正在尝试编写一个 Mac OS 菜单额外应用程序,当用户按下某个热键时,它会显示一个包含当前活动应用程序菜单栏项的上下文菜单。上下文菜单的显示我可以做得很好,但我似乎无法获得当前活动应用程序的菜单栏项。目前我正在使用[[[NSWorkspace sharedWorkspace] runningApplications] filteredArrayUsingPredicate:]获取活动应用程序的名称,但 NSRunningApplication 似乎包含很少的其他信息。有什么方法可以从外部应用程序获取有关应用程序菜单的信息?

更新:

如果您对使用 AppleScript 感到满意,使用ScriptingBridge框架似乎效果很好:

    SystemEventsApplication* sevApp = [SBApplication applicationWithBundleIdentifier:@"com.apple.systemevents"];
    SystemEventsProcess* proc = [[sevApp applicationProcesses] objectWithName:appName];

    for (SystemEventsMenuBar* menuBar in proc.menuBars) {
        for (SystemEventsMenuBarItem* menuBaritem in menuBar.menuBarItems) {
            NSLog(@"%@", menuBaritem.name);
        }
    }

将打印出应用程序菜单栏中可用的菜单列表。还没有找到获取上下文菜单的方法,所以我不会称之为回答...

这也很有用:http ://robnapier.net/blog/scripting-bridge-265

4

1 回答 1

0

您可以使用AppleScript模拟单击​​此处所示的菜单项,但我不确定是否可以动态获取所有菜单项的名称,以使用您需要已经将名称硬编码到应用程序中的方法。

于 2012-07-16T16:36:48.077 回答