Как отключить заставку Mac? - PullRequest
3 голосов
/ 08 июня 2010

Я пишу приложение, которое использует режим киоска Apple. Я хотел бы отключить экранную заставку, но класс «ScreenSaverDefaults» сообщает, что он является только 32-разрядным. Я могу изменить сборку только на 32-битную, но я хотел бы также поддерживать 64-битную архитектуру.

Существуют ли другие фреймворки, которые я должен использовать, чтобы отключить заставку?

Ответы [ 3 ]

3 голосов
/ 09 сентября 2011

Для тех, кто ищет, как это сделать (как я это делал) и не хочет возиться с редактированием файлов настроек, у Apple есть подходящий метод, чтобы остановить запуск заставки во время работы приложения. .

Технические вопросы и ответы QA1160: Профилактика сна

Надеюсь, это поможет.

3 голосов
/ 13 декабря 2010

Во-первых, вам нужно сохранить текущую настройку, чтобы вы могли вернуть ее обратно, как было до выключения:

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 для их повторного использования, но не делайте этого. Их можно запускать только один раз, поэтому вам придется создавать новые каждый раз, когда вы захотите это сделать.

1 голос
/ 15 марта 2011

Я закончил тем, что непосредственно прочитал файл настроек com.apple.screensaver и изменил значения idleTime и askForPassword так, чтобы они равнялись нулю. Простой CFPreferencesSynchronize и все было хорошо!

...