代码之家  ›  专栏  ›  技术社区  ›  J. Doe

如何在swift中获取macos上打开的窗口列表?

  •  1
  • J. Doe  · 技术社区  · 8 年前

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

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

    但问题是我也 Dock 或 Window Server , SystemUIServer 或状态栏上的小部件。如何改进代码以避免这些元素并只获取windows的列表,如 Xcode , Finder 等等?

    1 回复  |  直到 8 年前
        1
  •  2
  •   vadian    8 年前

    似乎所有可见的窗口都具有 0 对于钥匙 kCGWindowLayer

    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)