【问题标题】:how to traverse window/view hierarchy of other application in OS X?如何在 OS X 中遍历其他应用程序的窗口/视图层次结构?
【发布时间】:2015-11-02 07:03:20
【问题描述】:

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

【问题讨论】:

    标签: macos cocoa core-graphics nswindow


    【解决方案1】:

    现在可以通过 Xcode 的查看调试功能实现。要使用它:

    1. 开始正常运行目标应用程序
    2. 启动 Xcode,然后打开一个项目窗口(任何项目,可能需要是 OS X 而不是 iOS)
    3. 加载后使用“调试”>“附加到进程”菜单选择您的目标应用
    4. 现在单击小视图调试按钮 或再次使用菜单:调试 > 视图调试 > 捕获视图层次结构

    这应该会在 Xcode 的左窗格中向您显示应用视图的一种“分解”视图以及它们之间的关系树。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • Here's sample code 那你就去吧。它实际上非常简单且功能强大。
      • Nikolai,您应该将其发布为答案。几个月前你在哪里,当我真的可以使用这个指针的时候?
      • 谢谢,我想你的回答已经涵盖了。我添加了链接以使其更加可见。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-07
      • 2016-09-03
      • 1970-01-01
      相关资源
      最近更新 更多