2010-06-08 5 views
3

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

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

ответ

1

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

3

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

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

3

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

Technical Q&A QA1160: Preventing sleep

Надеется, что это помогает.