我正在尝试编写一个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);
}
}
将从应用程序的菜单栏中打印出可用菜单列表。还没有找到获取上下文菜单的方法,所以我现在还不认为这是有答案的。。。
这也很有用:https://robnapier.net/scripting-bridge
您可以使用AppleScript模拟单击此处所示的菜单项,但我不确定是否可以动态获取所有菜单项的名称,要使用该方法,您需要将名称硬编码到应用程序中。