2012-03-15 2 views
4

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

Я знаю, что вызов UpdateSystemActivity() каждые 30 секунд предотвращает запуск заставки, но меня интересует, есть ли способ обнаружить, что заставка не работает или нет.

Это должно быть App Store безопасные

ответ

1

Моих заметки говорят, что есть способ сделать это, используя недокументированный класс, ScreenSaverController. Вот заголовок:

@interface ScreenSaverController : NSObject 
{ 
    void *_reserved; 
} 

+ (id)controller; 
+ (id)enginePath; 
- (id)init; 
- (void)dealloc; 
- (BOOL)screenSaverIsRunning; 
- (BOOL)screenSaverCanRun; 
- (void)setScreenSaverCanRun:(BOOL)arg1; 
- (void)screenSaverStartNow; 
- (void)screenSaverStopNow; 
- (void)restartForUser:(id)arg1; 
- (double)screenSaverTimeRemaining; 
- (BOOL)screenSaverIsRunningInBackground; 
- (void)screenSaverDidFadeInBackground:(BOOL)arg1 
     psnHi:(unsigned int)arg2 
     psnLow:(unsigned int)arg3; 

@end 

А вот как его использовать:

ScreenSaverController *ssc = [ScreenSaverController controller]; 
if ([ssc screenSaverCanRun]) { ... } 
[ssc release]; 

Обратите внимание, что вам нужно будет связать против ScreenSaver рамки, чтобы использовать это. Поскольку это недокументированный класс, это сделает ваше приложение неприемлемым для Mac App Store.

Также обратите внимание на screenSaverTimeRemaining - некоторые способы предотвращения заставки от запуска могут просто непрерывно перезагружать это.

+0

Спасибо за ваш ответ, но я искал безопасное решение для магазина приложений. Я обновил вопрос. Если ничего не придет, я приму свой ответ. – Tibidabo

Смежные вопросы