我想改变屏幕上所有桌面(以前称为“Spaces”)的壁纸。从OS X 10.6开始,NSWorkspace有一个类别可以设置壁纸,但是当我使用此函数时,只会更改当前桌面的壁纸,而其他所有桌面保持不变。
然后我查看了桌面首选项plist并编写了一个类来修改它,以反映我想要的更改(基本上是设置新的图像文件路径)。保存新文件后,我发送了com.apple.desktop“BackgroundChanged”通知-如果您不知道我在说什么,请搜索一下Google,这是人们在10.6之前更改壁纸的方法。起初这没有产生任何结果,因此我不是用“nil”作为userInfo字典,而是像Apple在设置中更改壁纸时一样,发送完全相同的userInfo字典(在应用程序中订阅通知并在设置应用程序中更改壁纸,你将看到它是什么样子的)。运气在这里帮了我,当我以这种方式发送通知时,Dock出现了故障,重新加载时,它从首选项文件中加载设置,从而显示我的更改。
这适用于10.7.1,但是我a)宁愿不要有Dock崩溃和重新加载的不良用户体验,b)使用更或多或少保证在未来版本中适用的路径。利用漏洞似乎不是一条稳定的道路。
有关如何更改所有桌面壁纸的其他想法吗?我也不确定NSWorkspace壁纸类别的当前行为是否是故意的或是一个错误,但是从壁纸首选项窗格的行为来看,似乎前者才是正确的。
然后我查看了桌面首选项plist并编写了一个类来修改它,以反映我想要的更改(基本上是设置新的图像文件路径)。保存新文件后,我发送了com.apple.desktop“BackgroundChanged”通知-如果您不知道我在说什么,请搜索一下Google,这是人们在10.6之前更改壁纸的方法。起初这没有产生任何结果,因此我不是用“nil”作为userInfo字典,而是像Apple在设置中更改壁纸时一样,发送完全相同的userInfo字典(在应用程序中订阅通知并在设置应用程序中更改壁纸,你将看到它是什么样子的)。运气在这里帮了我,当我以这种方式发送通知时,Dock出现了故障,重新加载时,它从首选项文件中加载设置,从而显示我的更改。
这适用于10.7.1,但是我a)宁愿不要有Dock崩溃和重新加载的不良用户体验,b)使用更或多或少保证在未来版本中适用的路径。利用漏洞似乎不是一条稳定的道路。
有关如何更改所有桌面壁纸的其他想法吗?我也不确定NSWorkspace壁纸类别的当前行为是否是故意的或是一个错误,但是从壁纸首选项窗格的行为来看,似乎前者才是正确的。