首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无缝地更改Mac上所有桌面空间的壁纸,而不使用killall Dock

无缝地更改Mac上所有桌面空间的壁纸,而不使用killall Dock
EN

Stack Overflow用户
提问于 2021-12-19 13:56:02
回答 1查看 523关注 0票数 -1

我想改变所有桌面上的壁纸,包括Mac上的空间,但不需要每分钟打电话给killall Dock。(船坞重新启动强制墙纸刷新)。

我有一个可以立即改变桌面壁纸的AppleScript:

代码语言:javascript
运行
复制
tell application "System Events" to tell every desktop to set picture to wallpaperPath

但这只会改变活动空间上的壁纸(这意味着如果主桌面不活动,则其背景不会改变)。

我发现了如何循环遍历所有Mac桌面空间这个问题,它建议在位于~/Library/Application Support/Dock/desktoppicture.db的SQLite数据库中更新壁纸路径值。这会改变每个空间的壁纸,这是很好的,但它需要重新启动码头使用killall Dock,这是不可取的,因为它扰乱了工作流程。

我的问题是-有什么办法把这两种方法结合起来吗?在每个桌面空间上无缝地更换壁纸?

如有任何建议,将不胜感激。我没有首选的语言,它可以是C,Swift,Python,Bash,AppleScript等等。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-07 19:44:07

我想通了。

我正在浏览所有可用的屏幕,并使用setDesktopImageURL:forScreen:options:error:设置墙纸。

代码语言:javascript
运行
复制
for screen in NSScreen.screens {
    try! NSWorkspace.shared.setDesktopImageURL(url, for: screen, options: [:])
}

这可以无缝地改变壁纸,不需要在所有屏幕上使用killall Dock,但前提是桌面是活动空间。

为了确保在另一个空间(通常是一个全屏幕应用程序)上更改墙纸,我在NSWorkspace.shared.notificationCenter上添加了一个NSWorkspace.shared.notificationCenter的观察者,它再次设置桌面图像(使用上面的代码)。因此,每当我回到桌面时,就会调用这个通知,并无缝地更新墙纸。

我甚至更进一步,为NSWorkspace.didWakeNotification添加了同样的观察者,一旦设备醒来,它就会更新壁纸,这是很酷的!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70412058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档