以编程方式更改屏幕锁定超时

时间:2012-05-23 04:54:33

标签: objective-c cocoa system-preferences

在我的Cocoa应用程序中,我想访问并更改计算机的屏幕锁定超时设置。在“系统偏好设置”中更改它不需要用户输入管理员密码。

System Preferences screenshot - Screen lock timeout

不幸的是我在文档中找不到任何信息,我不确定应该查看哪些主题(安全设置/ prefPane编程)。
任何帮助将不胜感激。

2 个答案:

答案 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];
}