如何在 Swift 中获取 MacOS 上打开的窗口列表?

J. *_*Doe 3 macos swift

实际上,我正在尝试获取所有打开的窗口列表,如下所示:

let options = CGWindowListOption(arrayLiteral: .excludeDesktopElements, .optionOnScreenOnly)
let windowsListInfo = CGWindowListCopyWindowInfo(options, CGWindowID(0))
let infoList = windowsListInfo as NSArray? as? [[String: AnyObject]]
Run Code Online (Sandbox Code Playgroud)

但这里的问题是,我还在状态栏上看到了Dockor Window ServerSystemUIServer或小部件。我怎样才能提高我的代码从这些因素得到避免,并获得唯一窗口列表,如XcodeFinder等?

vad*_*ian 6

似乎所有可见的窗口都有0key的值kCGWindowLayer

import Cocoa

let options = CGWindowListOption(arrayLiteral: .excludeDesktopElements, .optionOnScreenOnly)
let windowsListInfo = CGWindowListCopyWindowInfo(options, CGWindowID(0))
let infoList = windowsListInfo as! [[String:Any]]
let visibleWindows = infoList.filter{ $0["kCGWindowLayer"] as! Int == 0 }

print(visibleWindows)
Run Code Online (Sandbox Code Playgroud)