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

标签 objective-c macos cocoa 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);
        }
    }

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

这也很有用:https://robnapier.net/scripting-bridge

最佳答案

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

关于Objective-C:从外部应用程序获取菜单信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11444033/

相关文章:

ios - 如何根据键盘管理 ScrollView (向上和向下)在 Objective-C 中使用 NSNotificationCenter 在屏幕中显示和隐藏

macos - 隐藏选项卡时未触发 OSX Safari transitionEnd

windows - mmap 的便携性如何?

objective-c - 为什么自定义 setter 的存在会破坏我的自定义 getter?

ios - 在 Objective-C 中,如何在 View Controller 中的函数之间共享数据?

objective-c - 如何确保 NSOperationQueue 确实为空

iphone - 有没有办法从 iPhone 地址簿 API 获取 "Me"卡?

c++ - 将 NSValue 解码为 b2fixture 时的 EXC_BAD_ACCESS

ios - 与 AppKit 的 NSObliquenessAttributeName 等效的 CoreText 是什么?

objective-c - 在 Cocoa 和 Objective-C 中使用 sudo 命令?