Настройка фона рабочего стола на всех пространствах в Cocoa

Я пишу небольшое приложение, чтобы изменить фон рабочего стола. Если пользователь использует только одно пространство, то все прекрасно, но когда он имеет несколько пробелов, приложение работает только в текущем активном пространстве.

Я использую этот код

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

чтобы изменить фон рабочего стола, и похоже, что нет способа изменить фон другого пространства.

Я только нашел ответы от нескольких лет назад, и никто не задавал этот конкретный вопрос. Есть ли способ сделать это в objective-c?

Ответ 1

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"];

Ответ 2

Несмотря на отсутствие открытого API для изменения фона пробела, есть способы сделать это. Ключевое слово, которое вы ищете, это com.apple.desktop.plist, находящееся внутри ~/Library/Preferences/. Это plist, который хранит весь текущий фон для всех текущих пространств. Если вы хотите использовать objective-c, вы можете изменить этот файл по своему вкусу или использовать одно из предлагаемых решений здесь и . Если вы нацеливаете Mavericks, данные обоев здесь: ~/Library/Application\ Support/Dock/desktoppicture.db"