我需要读取MAC OS中最前面的应用程序的所有快捷方式。Cocoa,Objective-c中是否有提供此的API或类?
辅助功能 API 正是您所需要的。不幸的是,它相当复杂,最好通读 UIElementInspector 源代码以了解它的使用方式,以及 Mac 辅助功能编程指南中与辅助应用程序相关的部分。
你想要的需要很多代码,所以我将概述这些步骤。
- 使用
[[NSWorkspace sharedWorkspace] runningApplications]
获取应用程序列表并获取其active
属性为YES
的应用程序。 - 使用
NSRunningApplication
的processIdentifier
属性获取该应用程序的 PID。 - 现在,我们转到辅助功能,通过应用程序服务 API 访问
- 使用
AXUIElementCreateApplication
创建一个表示活动应用程序的 AXUIElement,它将pid
作为参数。 - 现在,您有一个具有
Application
角色或伪类AXApplication
AXUIElement
。您需要沿着元素的层次结构向下AXApplication
->AXMenuBar
->AXMenuBarItem
->AXMenuItem
。请注意,AXMenuItems
可以在其下嵌套其他AXMenuItems
。 - 若要遍历层次结构,请使用
AXUIElementCopyAttributeValues
获取kAXChildrenAttribute
的值。这将返回一个子数组AXUIElements
。 - 最后,当您找到
AXMenuItem
元素时,请检查其菜单项 Cmd 字符、字形、修饰符和虚拟键属性以获取实际快捷方式。此处列出了属性名称的常量,如kAXMenuItemCmdCharAttribute
。
不想竞争@woody :)
但我发现了这个,它也可能有所帮助:
用户界面浏览器