来自AXUIElement的CGWindowID

时间:2009-11-16 15:26:56

标签: cocoa macos automation macos-carbon

我正在尝试使用辅助功能API自动化外部OSX应用程序。一些 应用程序的状态不能通过API获得,所以我通过它获取它 屏幕抓取。为此,我需要获取CGWindowID作为辅助功能对象 '窗口角色'。

有没有直接获取“Window Role”辅助功能对象的CGWindowID的方法? 我可以通过匹配窗口的各种属性来启发式地获取它,例如 大小,标题和位置,但这真的很hacky,如果我的话,我会感觉更好 申请也会支持角落案件,即使他们不太可能。

2 个答案:

答案 0 :(得分:8)

至少有Leopard及以上的功能(从10.7.3起仍然存在):

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

关于使用这样的东西的常见警告虽然适用。它可能会在下次操作系统更新后立即更改!

答案 1 :(得分:4)

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