Objective-C:从外部应用程序获取菜单信息

ala*_*dai 6 macos cocoa objective-c menubar scripting-bridge

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

更新:

使用ScriptingBridge框架似乎工作得相当好,如果你很高兴使用AppleScript:

    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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

将打印出应用程序菜单栏中提供的菜单列表.还没有找到获取上下文菜单的方法,所以我暂不会回答这个问题...

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

sto*_*m92 0

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