Во-первых, вам нужно сохранить текущую настройку, чтобы вы могли вернуть ее обратно, как было до выключения:
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]
Наслаждайтесь!
Билли
P.S .: И последнее, у вас может возникнуть соблазн сохранить объекты NSTask для их повторного использования, но не делайте этого. Их можно запускать только один раз, поэтому вам придется создавать новые каждый раз, когда вы захотите это сделать.