6

我正在尝试使用辅助功能 API 自动化外部 OSX 应用程序。应用程序的某些状态无法通过 API 获得,因此我通过屏幕抓取来获取它。为此,我需要为具有“窗口角色”的可访问性对象获取 CGWindowID。

是否有任何直接获取“窗口角色”可访问性对象的 CGWindowID 的方法?我可以通过匹配窗口的各种属性(例如大小、标题和位置)来启发式地得到它,但这真的很hacky,如果我的应用程序也支持极端情况,我会感觉更好,即使它们不太可能.

4

2 回答 2

10

至少有一个来自 Leopard 及更高版本的功能(截至 10.7.3 仍然存在):

extern "C" AXError _AXUIElementGetWindow(AXUIElementRef, CGWindowID* out);

不过,有关使用此类内容的通常警告也适用。它可能会在下一次操作系统更新后立即更改!

于 2012-03-08T20:37:56.617 回答
4

没有办法做到这一点;可访问性层次结构与实际的窗口/视图层次结构完全分离。我认为你的匹配效果最好。

于 2009-11-19T23:20:32.643 回答