Как определить, что приложение (такое как Quicktime) препятствует запуску заставки - PullRequest
4 голосов
/ 16 марта 2012

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

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

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

1 Ответ

1 голос
/ 19 марта 2012

Мои заметки говорят, что есть способ сделать это, используя недокументированный класс, 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 Framework, чтобы использовать это.Так как это недокументированный класс, это сделает ваше приложение непригодным для Mac App Store.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...