如何遍历OS X中其他应用程序的窗口/视图层次结构?

时间:2015-11-02 07:03:21

标签: macos cocoa core-graphics nswindow

我试图弄清楚如何获取(只读)任何应用程序的整个窗口/视图层次结构。我使用"CGWindowListCopyWindowInfo"获取所有打开窗口的列表。它还返回窗口编号("kCGWindowNumber")。它还显示"kCGWindowSharingState = 1;"的根窗口共享状态。现在,我想检查该应用程序层次结构中是否存在特定窗口/视图。我得到kCGWindowNumber这是应用程序的根窗口。

2 个答案:

答案 0 :(得分:2)

现在可以通过Xcode的View Debugging功能实现。要使用它:

  1. 按正常情况启动目标应用
  2. 启动Xcode,打开一个项目窗口(任何项目,可能需要是OS X而不是iOS)
  3. 使用Debug>加载后附加到处理菜单以选择目标应用程序
  4. 现在点击小视图调试按钮View Debugging button或再次使用菜单:Debug>查看调试>捕获视图层次结构
  5. 这应该会向你展示一种"爆炸"在Xcode的左侧窗格中查看应用程序的视图以及它们之间的关系树。

答案 1 :(得分:1)

你真的无法通过Core Graphics做到这一点,因为视图层次结构完全是Cocoa概念。您可以通过Cocoa Scripting Bridge执行此操作,可能与GUI自动化对辅助功能的支持(here's example code for that)结合使用。