【问题标题】:Is it possible to get a full list of windows of running apps?是否可以获得正在运行的应用程序窗口的完整列表?
【发布时间】:2017-11-07 16:55:09
【问题描述】:

我正在尝试获取 macOS 上正在运行的应用程序的列表,以便对全屏应用程序进行特定的窗口操作。

首先我通过 [NSWorkspace sharedWorkspace].runningApplications 获取所有正在运行的应用程序列表,然后我使用 Accessibility API 来获取窗口:

AXUIElementCopyAttributeValues((__bridge AXUIElementRef) app,
                               (__bridge CFStringRef) kAXWindowsAttribute,
                               index,
                               count,
                               &values);

看起来这是要走的路,但对于具有全屏窗口的应用程序,kAXWindowsAttribute 是空的。对于非全屏窗口,它工作得很好。

【问题讨论】:

  • runningApplications 确实似乎包括运行全屏的应用程序(在有限的测试中)。编辑您的问题以显示您的代码并更详细地解释它出了什么问题。希望有人可以帮助你。
  • 您的问题似乎与全屏窗口本身无关,而是与不同空间中的窗口有关。尝试在不同的空间中打开应用程序并运行您的代码,除非您的代码在同一空间中运行,否则您将无法获得窗口。我怀疑这与 Apple 的强烈观点有关,即不应该有(公共)编程接口来切换空间,但你必须弄清楚这一点。 HTH

标签: objective-c macos cocoa nsworkspace


【解决方案1】:

Core Graphics Services API 可以通过 CGWindowListCopyWindowInfo() 函数提供所有窗口的列表。

【讨论】:

  • 我可以使用相同的 API 操作(退出全屏/最小化)窗口吗?
  • 不。但是,一旦您有了窗口 ID,您就可以使用辅助功能 API。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-31
相关资源
最近更新 更多