OSX 似乎有一个不对称的可访问性 API;您可以使用NSAccessibilityProtocol使您自己的应用程序可访问,但要访问另一个应用程序的可访问性,您必须使用一组单独的接口/对象、AXUIElement和朋友。
我发现一篇关于检索具有焦点的窗口的文章可能在这里有用:似乎关键步骤是:
- 使用AXUIElementCreateSystemWide创建一个“系统范围”的可访问性对象
AXUIElementCopyAttributeValue
通过调用ask for 来请求当前关注的应用程序的对象kAXFocusedApplicationAttribute
再次使用 向返回的对象询问焦点窗口AXUIElementCopyAttributeValue
,但这次NSAccessibilityFocusedWindowAttribute
- 实际上看起来您可以跳过下面的这一步,直接从焦点应用程序转到焦点 UI 元素...
- 再次使用相同的 API 向返回的对象询问当前聚焦的元素,但这次使用
NSAccessibilityFocusedUIElementAttribute
- 询问该元素的 kAXSizeAttribute / kAXPositionAttribute
您可能还想查看UIElementInspector的源代码,它在鼠标指针下显示有关元素的信息(尽管它似乎没有对焦点做任何事情)。
看起来您还需要通过 GUI(请参阅上面的文章)或通过终端启用可访问性 API,以使上述任何一项工作 - 大概这是为了让用户防御恶意应用程序控制他们的桌面。
我个人(还)没有使用过这些;但我对可访问性 API 足够熟悉,知道去哪里找 - 希望这会有所帮助。