在我的Cocoa应用程序中,我想访问并更改计算机的屏幕锁定超时设置。在“系统偏好设置”中更改它不需要用户输入管理员密码。
不幸的是我在文档中找不到任何信息,我不确定应该查看哪些主题(安全设置/ prefPane编程)。
任何帮助将不胜感激。
答案 0 :(得分:1)
NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:@"/Users/new/Library/Preferences/com.apple.screensaver.plist"];
[plistDict setObject:@"1" forKey:@"askForPassword"];
[plistDict setObject:@"3600" forKey:@"askForPasswordDelay"];
[plistDict writeToFile:@"/Users/new/Library/Preferences/com.apple.screensaver.plist" atomically:YES];
或从终端
defaults write com.apple.screensaver askForPasswordDelay 5
答案 1 :(得分:1)
上面的答案显然适用于某些人,但是在10.8,如果您使用的是FileVault则会失败。该设置将保持不变,但在启动“系统偏好设置”之后,该设置才会生效。幸运的是,有一种方法可以在完成后“触摸”设置:
- (void)touchSecurityPreferences;
{
NSAppleScript *kickSecurityPreferencesScript = [[[NSAppleScript alloc] initWithSource: @"tell application \"System Events\" to tell security preferences to set require password to wake to true"] autorelease];
[kickSecurityPreferencesScript executeAndReturnError:nil];
}
编辑原来这只适用于从非零设置变为零设置。我认为这是一个安全的事情。换句话说,启动系统偏好设置是唯一的方法。
编辑2 以下是启动系统偏好设置的代码,如果您愿意这样做:
- (void)launchAndQuitSecurityPreferences;
{
// necessary for screen saver setting changes to take effect on file-vault-enabled systems when going from a askForPasswordDelay setting of zero to a non-zero setting
NSAppleScript *kickSecurityPreferencesScript = [[[NSAppleScript alloc] initWithSource:
@"tell application \"System Preferences\"\n"
@" tell anchor \"General\" of pane \"com.apple.preference.security\" to reveal\n"
@" activate\n"
@"end tell\n"
@"delay 0\n"
@"tell application \"System Preferences\" to quit"] autorelease];
[kickSecurityPreferencesScript executeAndReturnError:nil];
}