以编程方式更改屏幕保护程序设置
Programmatically change screen saver settings
我正在尝试以编程方式更改配置的屏幕保护程序。
如果我这样做
$ defaults -currentHost read com.apple.screensaver
{
CleanExit = YES;
PrefsVersion = 100;
idleTime = 600;
moduleDict = {
moduleName = XXXX;
path = "/Users/juanjo/Library/Screen Savers/XXXX.saver";
type = 0;
};
showClock = 0;
}
我可以看到该信息,甚至可以使用写入参数更新它。
此设置无法通过 NSUserDefaults 访问,但可以通过 CF 访问。
我可以通过代码做到这一点
var moduleDict = CFPreferencesCopyAppValue("moduleDict", "com.apple.screensaver") as CFDictionary
但是当我试图从中获取一个值时 "dict" 程序在这一行崩溃:
var saverName = CFDictionaryGetValue(moduleDict, "moduleName")
说 EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
.
那么,你知道我如何读取这个值并写回吗?
正如我在 Cocoa-开发列表中提到的那样,我可以这样做。
阅读中:
var moduleDict = CFPreferencesCopyAppValue("moduleDict", "com.apple.screensaver") as NSDictionary
var saverName = moduleDict["moduleName"] as String!
写作:
var moduleDict = CFPreferencesCopyAppValue("moduleDict", "com.apple.screensaver") as NSDictionary
var mutable = moduleDict.mutableCopy() as NSMutableDictionary
mutable["moduleName"] = "MyScreenSaver"
mutable["path"] = mySaverPath
CFPreferencesSetValue("moduleDict", mutable as CFPropertyList, "com.apple.screensaver", kCFPreferencesCurrentUser, kCFPreferencesCurrentHost)
CFPreferencesAppSynchronize("com.apple.screensaver")
我正在尝试以编程方式更改配置的屏幕保护程序。
如果我这样做
$ defaults -currentHost read com.apple.screensaver
{
CleanExit = YES;
PrefsVersion = 100;
idleTime = 600;
moduleDict = {
moduleName = XXXX;
path = "/Users/juanjo/Library/Screen Savers/XXXX.saver";
type = 0;
};
showClock = 0;
}
我可以看到该信息,甚至可以使用写入参数更新它。
此设置无法通过 NSUserDefaults 访问,但可以通过 CF 访问。
我可以通过代码做到这一点
var moduleDict = CFPreferencesCopyAppValue("moduleDict", "com.apple.screensaver") as CFDictionary
但是当我试图从中获取一个值时 "dict" 程序在这一行崩溃:
var saverName = CFDictionaryGetValue(moduleDict, "moduleName")
说 EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
.
那么,你知道我如何读取这个值并写回吗?
正如我在 Cocoa-开发列表中提到的那样,我可以这样做。
阅读中:
var moduleDict = CFPreferencesCopyAppValue("moduleDict", "com.apple.screensaver") as NSDictionary
var saverName = moduleDict["moduleName"] as String!
写作:
var moduleDict = CFPreferencesCopyAppValue("moduleDict", "com.apple.screensaver") as NSDictionary
var mutable = moduleDict.mutableCopy() as NSMutableDictionary
mutable["moduleName"] = "MyScreenSaver"
mutable["path"] = mySaverPath
CFPreferencesSetValue("moduleDict", mutable as CFPropertyList, "com.apple.screensaver", kCFPreferencesCurrentUser, kCFPreferencesCurrentHost)
CFPreferencesAppSynchronize("com.apple.screensaver")