【发布时间】:2019-10-18 14:35:23
【问题描述】:
我正在为 macOS 创建一个窗口切换器。
我正在使用CGWindowListCopyWindowInfo 来获取打开的窗口列表。
let windows = CGWindowListCopyWindowInfo([.excludeDesktopElements], kCGNullWindowID)
我没有将optionOnScreenOnly 选项与CGWindowListCopyWindowInfo 一起使用,因为它不包括关闭-space 窗口。
但是,这会导致某些虚拟窗口也包含在窗口列表中。例如,Xcode 上每个打开的选项卡都有一个窗口。除了实际窗口外,VLC 播放器还有一个额外的不可见窗口。如果我使用optionOnScreenOnly,这些窗口将不存在。
有没有办法将这些虚拟窗口与实际窗口分开?
我探索了CGWindowListCopyWindowInfo 返回的字典中的kCGWindowLayer 和kCGWindowStoreType 键,但无法区分窗口。
编辑:
我对 Swift 和 Objective-C 解决方案以及私有 API 调用持开放态度。
编辑 2:
我知道这是可能的,因为应用程序 Witch 正确处理了这些情况。
【问题讨论】:
-
来自 Witch 的常见问题解答:“Witch 使用称为 Accessibility API 的公共 API(应用程序编程接口)来获取有关其他程序中打开的窗口的信息。”
-
你有一个我可以检查并尝试帮助你的最小工作示例吗?
标签: objective-c swift macos