如何在Mac OS X的辅助功能API中获得当前的键盘焦点坐标?

时间:2013-05-09 13:25:36

标签: macos keyboard focus accessibility-api

我正在寻找Mac OS X辅助功能API来获取当前键盘(而非鼠标)焦点位置的坐标。根据我在http://www.apple.com/accessibility/pdf/Mac_OS_X_Tiger_vpat.pdf找到的文件的第2页,它是可行的:

  

支持的:   Mac OS X公开了当前键盘的位置   鼠标通过Accessibility API专注于辅助技术   还提供了屏幕上焦点的视觉指示。

尽管如上所述,我似乎无法找到API本身。我是一名经验丰富的开发者(编码自1982年以来),但从未在Mac OS X上开发过;请温柔。

1 个答案:

答案 0 :(得分:4)

OSX似乎具有非对称可访问性API;您可以使用NSAccessibilityProtocol来访问自己的应用,但要访问其他应用的辅助功能,您必须使用一组单独的界面/对象,AXUIElement和朋友。

我在Retreiving the window that has focus找到了一篇可能有用的文章:关键步骤似乎是:

  • 使用AXUIElementCreateSystemWide创建“系统范围”辅助功能对象
  • 通过致电AXUIElementCopyAttributeValue询问kAXFocusedApplicationAttribute
  • ,向该对象询问当前关注的应用
  • 使用AXUIElementCopyAttributeValue再次向返回的对象询问焦点窗口,但这次是NSAccessibilityFocusedWindowAttribute - 实际上您可以跳过此步骤,直接从专注于应用于重点UI元素......
  • 再次使用相同的API向返回的对象询问当前关注的元素,但这次使用NSAccessibilityFocusedUIElementAttribute
  • 向该元素询问其kAXSizeAttribute / kAXPositionAttribute

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

看起来您还需要通过GUI(参见上文)或via terminal启用辅助功能API,以实现上述任何功能 - 大概这是为了让用户能够防范控制流氓的应用程序他们的桌面。

我还没有亲自使用过这些;但我对可访问性API非常熟悉,知道在哪里看 - 希望这会有所帮助。