我需要阅读 MAC OS 中最前面的应用程序的所有快捷方式。Cocoa,Objective-c中是否有提供此功能的API或类?
问问题
552 次
2 回答
8
Accessibility API 是您所需要的。不幸的是,它相当复杂,最好通读 UIElementInspector源代码以了解它是如何使用的,以及Mac 的 Accessibility Programming Guidelines中与辅助应用程序相关的部分。
您想要的将需要大量代码,因此我将概述这些步骤。
- 用于获取应用程序列表,并获取属性为
[[NSWorkspace sharedWorkspace] runningApplications]
的应用程序。active
YES
NSRunningApplication
使用'processIdentifier
属性获取该应用程序的 PID 。- 现在我们进入可访问性,通过应用程序服务API访问
- 使用 AXUIElement 创建一个表示活动应用程序的 AXUIElement
AXUIElementCreateApplication
,它pid
作为参数。 - 现在你有了一个
AXUIElement
withApplication
角色,或AXApplication
伪类。你会想要继续向下元素的层次结构AXApplication
->AXMenuBar
->AXMenuBarItem
->AXMenuItem
。请注意,AXMenuItems
可以有其他AXMenuItems
嵌套在它们之下。 - 要遍历层次结构,请使用
AXUIElementCopyAttributeValues
获取 的值kAXChildrenAttribute
。这将返回一个 children 数组AXUIElements
。 - 最后,当您到达
AXMenuItem
元素时,检查它们的菜单项 Cmd 字符、字形、修饰符和虚拟键属性以获取实际快捷方式。属性名称的常量,如,在此处kAXMenuItemCmdCharAttribute
列出。
于 2012-07-29T06:08:55.113 回答
0
于 2012-07-29T06:19:52.630 回答