2

我正在寻找一个 Mac OS X Accessibility API 来获取当前键盘(不是鼠标)焦点位置的坐标。根据我在http://www.apple.com/accessibility/pdf/Mac_OS_X_Tiger_vpat.pdf找到的文档的第 2 页,这是可行的:

支持:Mac OS X 通过辅助功能 API 向辅助技术公开当前键盘和鼠标焦点的位置,并在屏幕上提供焦点的视觉指示。

尽管有上述声明,但我似乎无法找到 API 本身。我是一名经验丰富的开发人员(从 1982 年开始编码),但从未在 Mac OS X 上开发过;请温柔一点。

4

1 回答 1

5

OSX 似乎有一个不对称的可访问性 API;您可以使用NSAccessibilityProtocol使您自己的应用程序可访问,但要访问另一个应用程序的可访问性,您必须使用一组单独的接口/对象、AXUIElement和朋友。

我发现一篇关于检索具有焦点的窗口的文章可能在这里有用:似乎关键步骤是:

  • 使用AXUIElementCreateSystemWide创建一个“系统范围”的可访问性对象
  • AXUIElementCopyAttributeValue通过调用ask for 来请求当前关注的应用程序的对象kAXFocusedApplicationAttribute
  • 再次使用 向返回的对象询问焦点窗口AXUIElementCopyAttributeValue,但这次NSAccessibilityFocusedWindowAttribute- 实际上看起来您可以跳过下面的这一步,直接从焦点应用程序转到焦点 UI 元素...
  • 再次使用相同的 API 向返回的对象询问当前聚焦的元素,但这次使用NSAccessibilityFocusedUIElementAttribute
  • 询问该元素的 kAXSizeAttribute / kAXPositionAttribute

您可能还想查看UIElementInspector的源代码,它在鼠标指针下显示有关元素的信息(尽管它似乎没有对焦点做任何事情)。

看起来您还需要通过 GUI(请参阅上面的文章)或通过终端启用可访问性 API,以使上述任何一项工作 - 大概这是为了让用户防御恶意应用程序控制他们的桌面。

我个人(还)没有使用过这些;但我对可访问性 API 足够熟悉,知道去哪里找 - 希望这会有所帮助。

于 2013-05-30T09:51:19.510 回答