在Cocoa中的所有Spaces上设置桌面背景

时间:2013-01-29 15:23:35

标签: objective-c cocoa desktop

我正在编写一个小应用来更改您的桌面背景。如果用户只使用一个空格,那么一切都很好,但是当他有多个空格时,应用程序只适用于当前活动的空间。

我正在使用此代码

[[NSWorkspace sharedWorkspace] setDesktopImageURL:currentImageURL 
                                        forScreen:screenToChange 
                                          options:screenOptions 
                                            error:&error]

更改桌面背景,看起来似乎无法更改其他空间的背景。

我几年前才找到答案,没人问这个具体问题。有没有办法在objective-c中做到这一点?

2 个答案:

答案 0 :(得分:6)

虽然没有用于更改空间背景的公共API,但仍有办法实现。 您要查找的关键字是com.apple.desktop.plist,它位于~/Library/Preferences/内。这是存储所有当前空间的所有当前背景的plist。如果您想使用objective-c,可以根据自己的喜好更改此文件,也可以使用建议的解决方案之一herehere。如果您要定位Mavericks,则会在此处显示壁纸数据:~/Library/Application\ Support/Dock/desktoppicture.db"

答案 1 :(得分:2)

Setting the desktop background on all Spaces in Cocoa

如果用户想要为多个空格设置桌面背景,请尝试以下代码: -

了解更多信息refer this

NSString* path = @"/Users/abc/Desktop/yourImg.png";

NSUserDefaults* def = [NSUserDefaults standardUserDefaults];
NSMutableDictionary* desktopDict = [NSMutableDictionary dictionaryWithDictionary:[def persistentDomainForName:@"com.apple.desktop"]];
NSMutableDictionary* bgDict = [desktopDict objectForKey:@"Background"];
NSMutableDictionary* spaces = [bgDict objectForKey:@"spaces"];
[spaces enumerateKeysAndObjectsUsingBlock:^(NSString* key, NSMutableDictionary* obj, BOOL *stop) {
    [obj enumerateKeysAndObjectsUsingBlock:^(id key, NSMutableDictionary* prefs, BOOL *stop) {
        [prefs setObject:path forKey:@"ImageFilePath"];
        [prefs setObject:path forKey:@"NewImageFilePath"];
        [prefs setObject:@"Never" forKey:@"Change"];
    }];
}];
[def setPersistentDomain:desktopDict forName:@"com.apple.desktop"];