Я могу интерпретировать ваш вопрос несколькими способами:
Как определить, когда появится заставка?
Проверьте следующий скрипт ( оригинальный ответ ):
#!/bin/bash
systemSleepTimeMinutes=`pmset -g | grep "^[ ]*sleep" | awk '{ print $2 }'`
if [ $systemSleepTimeMinutes -gt "0" ]; then
systemSleepTime=`echo "$systemSleepTimeMinutes * 60" | bc`
devicesIdleTime=`ioreg -c IOHIDSystem | awk '/HIDIdleTime/ {print $NF/1000000000; exit}'`
secondsBeforeSleep=`echo "$systemSleepTime - $devicesIdleTime" | bc`
echo "Time before sleep (sec): $secondsBeforeSleep"
exit 0
else
echo "The system is set to not sleep."
exit 0
fi
В случае, если экранная заставка подавлена, например, VLC, результатом будет:
Система отключена.
В противном случае возвращается время до появления заставки, например:
Время до сна (сек): 899,88056
Запустите указанный выше сценарий через NSTask
или NSAppleScript
и проанализируйте результат.
Обратите внимание, что «сон» может также вернуться к заставке, в зависимости от того, какой из них пинает первым.
Как определить, подавлена ли заставка?
Следующая строка делает трюк:
pmset -g | grep "^[ ]*sleep" | awk '{ print $2 }'
Если экранная заставка отключена, она возвращает 0
.
Выполните строку выше через NSTask
или NSAppleScript
и проанализируйте результат.
Как подавить заставку?
Официальная документация Apple (включая фрагмент кода):
Как я могу предотвратить системный сон во время работы моего приложения?
РЕДАКТИРОВАТЬ (Ответ на комментарий)
Однако есть ли встроенный метод, который работает так же, как этот скрипт?
Я не знаком с таким методом. Я на самом деле сомневаюсь, что это существует.
Быстрый NSAppleScript
пример:
NSString *source = @"do shell script \"pmset -g | grep \\\"^[ ]*sleep\\\" | awk '{ print $2 }'\"";
NSAppleScript *script= [[NSAppleScript alloc] initWithSource:source];
NSDictionary *scriptError = nil;
NSAppleEventDescriptor *descriptor=[script executeAndReturnError:&scriptError];
if(scriptError) {
NSLog(@"Error: %@",scriptError);
} else {
if ([[descriptor stringValue] intValue] == 0) {
NSLog(@"Screensaver suppressed.");
} else {
NSLog(@"Screensaver not suppressed.");
}
}
Только не отказывайтесь от использования NSTask
или NSAppleScript
:)