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

Suy*_*tel 5 macos cocoa core-graphics nswindow

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

nat*_*evw 5

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

  1. 像往常一样启动目标应用程序运行
  2. 启动 Xcode,并打开一个项目窗口(任何项目,可能需要是 OS X 而不是 iOS)
  3. 加载后使用“调试”>“附加到进程”菜单来选择您的目标应用程序
  4. 现在单击小视图调试按钮 查看调试按钮 或再次使用菜单:Debug > View Debugging > Capture View Hierarchy

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


Mar*_*sey 2

你确实不能通过 Core Graphics 来做到这一点,因为视图层次结构完全是 Cocoa 的概念。您可以通过Cocoa Scripting Bridge来完成此操作,可能与辅助功能的 GUI 自动化支持相结合(这里是示例代码)。

  • [这里是示例代码](https://developer.apple.com/library/mac/samplecode/UIElementInspector/Introduction/Intro.html),让您开始。它实际上非常简单且功能强大。 (2认同)