是否可以(以编程方式)为 macOS 中的每个单独"空间"/桌面设置壁纸?



我正在为自己制作一个小应用程序,以定期更改桌面背景图像。

我的程序包含这个代码块:

let screen = NSScreen.main()!
let newWallpaperURL = URL(/* ... */)
// ...
try! NSWorkspace.shared().setDesktopImageURL(newWallpaperURL, for: screen, options: [:])

这起作用,但仅针对当前的"空间"键盘都集中在。

例如。如果我在一个全屏应用程序中,则只会更改所占用的全屏应用程序的背景(而不是我普通桌面的背景)。如果我有两个空格/桌面,它只会更改其中一个的背景图像。

是否可以通过编程为每个空间单独设置壁纸?

您可以获取所有屏幕并设置所有屏幕。

let screens = NSScreen.screens
let newWallpaperURL = URL(/* ... */)
for i in screens {
    try! NSWorkspace.shared().setDesktopImageURL(newWallpaperURL, for: i, options: [:])
}

在xcode 8.x中使用此此操作:

if let screens = NSScreen.screens() {
    let newWallpaperURL = URL(/* ... */))
    for screen in screens {
        try? NSWorkspace.shared().setDesktopImageURL(newWallpaperURL, for: screen, options: [:])
    }
}

与此处发布的其他解决方案不同,该解决方案将在当前Xcode 8中使用。NSScreen.screens是Xcode 9(当前Beta)中的A 类VAR 8这就是为什么您需要放置.screens()而不是.screens的原因。另外,screens返回可选的,因此您需要在将其传递到for循环之前安全地将其拆开。

相关内容

最新更新