获取 Mac 上 运行 应用程序的 windows 列表

Get the list of windows for running application on Mac

我使用了 CGWindow API and SonOfGrab 个样本中的样本来获取 windows 列表并抓取它们,特别是我使用 CGWindowListCopyWindowInfo 来检索 windows 的列表以及 CGWindowListOption指定。但是我这里有问题。问题是我只想查看属于 运行 应用程序的 windows 列表,即我不想为扩展坞、系统菜单等获取 windows

我尝试设置 kCGWindowListExcludeDesktopElementskCGWindowListOptionOnScreenOnly 标志,他们删除了一些我不感兴趣的 windows,但是即使设置了这些选项,我仍然有 'Dropbox icon in menu bar' window, dock window, 系统面板 window 等。有没有办法过滤掉它们?

我还尝试请求 [[NSWorkspace sharedWorkspace] runningApps] 获取 运行 应用程序的列表。我的想法是从 runningApps 获取进程标识符,并从 windows 列表中删除那些在 runningApps 列表中没有进程标识符的进程。不幸的是,它没有成功,因为 运行 应用程序列表比我预期的要大得多,而且它还包含仪表板应用程序和其他东西。我试图找到一个 属性 或类似的东西来区分这些 'system apps' 和 'real apps',但是我没能做到这一点。

有人知道怎么解决吗?

谢谢。

你可以:

  • 获取 运行 应用程序的捆绑包
  • 检查它的 plist 是否有 UIElement 键 -> 那些不会在 dock 中

=> 然后根据剩余的 PID

过滤 windows