4

我需要阅读 MAC OS 中最前面的应用程序的所有快捷方式。Cocoa,Objective-c中是否有提供此功能的API或类?

4

2 回答 2

8

Accessibility API 是您所需要的。不幸的是,它相当复杂,最好通读 UIElementInspector源代码以了解它是如何使用的,以及Mac 的 Accessibility Programming Guidelines中与辅助应用程序相关的部分。

您想要的将需要大量代码,因此我将概述这些步骤。

  1. 用于获取应用程序列表,并获取属性为[[NSWorkspace sharedWorkspace] runningApplications]的应用程序。activeYES
  2. NSRunningApplication使用'processIdentifier属性获取该应用程序的 PID 。
  3. 现在我们进入可访问性,通过应用程序服务API访问
  4. 使用 AXUIElement 创建一个表示活动应用程序的 AXUIElement AXUIElementCreateApplication,它pid作为参数。
  5. 现在你有了一个AXUIElementwithApplication角色,或AXApplication伪类。你会想要继续向下元素的层次结构AXApplication-> AXMenuBar-> AXMenuBarItem-> AXMenuItem。请注意,AXMenuItems可以有其他AXMenuItems嵌套在它们之下。
  6. 要遍历层次结构,请使用AXUIElementCopyAttributeValues获取 的值kAXChildrenAttribute。这将返回一个 children 数组AXUIElements
  7. 最后,当您到达AXMenuItem元素时,检查它们的菜单项 Cmd 字符、字形、修饰符和虚拟键属性以获取实际快捷方式。属性名称的常量,如,在此处kAXMenuItemCmdCharAttribute列出。
于 2012-07-29T06:08:55.113 回答
0

不想竞争@woody :)

但我发现了这一点,它也可能有帮助:

用户界面浏览器

于 2012-07-29T06:19:52.630 回答