【问题标题】:Setting the desktop background on all Spaces in Cocoa在 Cocoa 中设置所有 Spaces 的桌面背景
【发布时间】:2018-08-17 16:57:56
【问题描述】:

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

我正在使用此代码

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

要改变桌面背景,好像没办法改变其他空间的背景。

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

【问题讨论】:

  • 我也不知道答案。我自己搜索过这个并且无法使其在objective-c或applescript中始终如一地工作。在我看来,苹果不会向开发人员公开这种能力,就像我们也不能对空格做任何事情一样。
  • @HussainShabbir 你是对的,但我还没有时间测试这个,请再等一下,我现在不知所措
  • 你找到方法了吗?
  • 不幸的是,这是很久以前的事了。我当时找不到任何方法来解决这个问题,但现在情况可能已经改变了。抱歉,我无法提供任何答案。

标签: objective-c cocoa desktop


【解决方案1】:

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

【讨论】:

  • 我们如何更改desktoppicture.db
【解决方案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"];

【讨论】:

  • 这似乎不适用于 10.11。尝试获取持久域“com.apple.desktop”返回 nil。任何解决方法的想法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-14
  • 2014-07-29
相关资源
最近更新 更多