2013-07-14 18 views
1

我使用下面的代碼來設置桌面圖片:如何以編程方式更改系統範圍的桌面圖片?

NSURL* newImage = [[NSURL alloc] initFileURLWithPath:@"/Users/name/Pictures/test.png"]; 
[[NSWorkspace sharedWorkspace] setDesktopImageURL:newImage forScreen:screen options:nil error:&nserror]; 

它工作正常,當我需要的桌面圖片改變。但它不會更改系統範圍的桌面偏好設置(例如,每30分鐘更改一次圖片)。我如何更改系統範圍的桌面偏好?

回答

0

看看Preferences and Settings Programming Guide。這應該有所幫助。

編輯
下面是示例代碼:

NSString* newImgPath = @"/Users/cody/Desktop/stuff/imgs/Black_mac.png"; 

NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; 
NSMutableDictionary* desktopDict = [NSMutableDictionary dictionaryWithDictionary:[defaults 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:newImgPath forKey:@"ImageFilePath"]; 
     [prefs setObject:newImgPath forKey:@"NewImageFilePath"]; 
     [prefs setObject:@"Never" forKey:@"Change"]; 
    }]; 
}]; 

//NSLog(@"%@", desktopDict); 

[defaults setPersistentDomain:desktopDict forName:@"com.apple.desktop"]; 
if ([defaults synchronize] == NO) 
    NSLog(@"synchronize failed"); 

// Restart dock 
system ("/usr/bin/killall Dock"); 
+0

感謝您的鏈接。但在閱讀鏈接後,我仍然沒有任何線索。你可以說得更詳細點嗎? – nim

+0

我發現有一個命令行默認可以讀/寫系統偏好設置(實際上它是我的用戶系統應用程序的首選項)。例如,默認讀取com.apple.desktop。默認的 – nim

+0

輸出讀com.apple.desktop: { 背景= { 空間= { 「」= { 69677376 = { 變化=從不; ChangePath =「/ Library/Desktop Pictures」; // ... }; 「update-id」= 10080000; } – nim