16

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

我正在使用此代码

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

改变桌面背景,看起来没有办法改变另一个空间的背景。

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

4

2 回答 2

6

尽管没有用于更改空间背景的公共 API,但有一些方法可以做到这一点。您正在寻找的关键字是com.apple.desktop.plistwhich is inside~/Library/Preferences/那是存储所有当前空间的所有当前背景的 plist。如果您想使用objective-c,您可以根据自己的喜好更改此文件,或者您可以使用此处此处建议的解决方案之一。如果您的目标是 Mavericks,壁纸数据在这里:~/Library/Application\ Support/Dock/desktoppicture.db"

于 2013-12-30T08:36:50.653 回答
2
Setting the desktop background on all Spaces in Cocoa

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

有关更多信息,请参阅此

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"];
于 2014-01-06T06:06:23.257 回答