我正在尝试编写一个 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);
}
}
将打印出应用程序菜单栏中可用的菜单列表。还没有找到获取上下文菜单的方法,所以我暂时不会称之为已回答...
最佳答案
您可以使用 AppleScript模拟点击如图所示的菜单项 here ,但我不确定是否可以动态获取所有菜单项的名称,要使用该方法,您需要将名称硬编码到应用程序中。
关于Objective-C:从外部应用程序获取菜单信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11444033/