我想改变所有桌面上的壁纸,包括Mac上的空间,但不需要每分钟打电话给killall Dock
。(船坞重新启动强制墙纸刷新)。
我有一个可以立即改变桌面壁纸的AppleScript:
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等等。
发布于 2022-01-07 19:44:07
我想通了。
我正在浏览所有可用的屏幕,并使用setDesktopImageURL:forScreen:options:error:设置墙纸。
for screen in NSScreen.screens {
try! NSWorkspace.shared.setDesktopImageURL(url, for: screen, options: [:])
}
这可以无缝地改变壁纸,不需要在所有屏幕上使用killall Dock
,但前提是桌面是活动空间。
为了确保在另一个空间(通常是一个全屏幕应用程序)上更改墙纸,我在NSWorkspace.shared.notificationCenter
上添加了一个NSWorkspace.shared.notificationCenter
的观察者,它再次设置桌面图像(使用上面的代码)。因此,每当我回到桌面时,就会调用这个通知,并无缝地更新墙纸。
我甚至更进一步,为NSWorkspace.didWakeNotification
添加了同样的观察者,一旦设备醒来,它就会更新壁纸,这是很酷的!
https://stackoverflow.com/questions/70412058
复制相似问题