Во-первых, вам необходимо сохранить текущие настройки, так что вы можете поместить его обратно, как это было прежде, чем вы выключили его:
NSTask *readTask = [[NSTask alloc] init];
[readTask setLaunchPath:@"/usr/bin/defaults"];
NSArray *arguments = [NSArray arrayWithObjects:@"-currentHost", @"read", @"com.apple.screensaver", @"idleTime", nil];
[readTask setArguments:arguments];
NSPipe *pipe = [NSPipe pipe];
[readTask setStandardOutput:pipe];
NSFileHandle *file = [pipe fileHandleForReading];
[readTask launch];
[readTask release];
NSData *data = [file readDataToEndOfFile];
NSString *originalValue = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
Так что теперь у вас есть исходное значение для idleTime скринсейвера в. Большой! Не теряй это. Теперь вы должны установить новое значение:
NSTask *writeTask = [[NSTask alloc] init];
[writeTask setLaunchPath:@"/usr/bin/defaults"];
NSArray *arguments = [NSArray arrayWithObjects:@"-currentHost", @"write", @"com.apple.screensaver", @"idleTime", @"0", nil];
[writeTask setArguments:arguments];
[writeTask launch];
[writeTask release];
И альт! Вы просто отключили заставку. Чтобы снова включить его, просто использовать второй блок кода снова, но пройти в originalValue как последний объект массива, а не @"0"
, например, так:
NSArray *arguments = [NSArray arrayWithObjects:@"-currentHost", @"write", @"com.apple.screensaver", @"idleTime", originalValue, nil]
Наслаждайтесь!
Billy
P.S .: Возможно, у вас может возникнуть соблазн сохранить объекты NSTask для их повторного использования, но не нужно. Их можно запустить только один раз, поэтому вам придется создавать новые, каждый раз, когда вы хотите это сделать.