Проверьте, находится ли дисплей в спящем режиме или получите уведомления о спящем режиме - PullRequest
1 голос
/ 08 февраля 2011

У меня есть прикладная утилита, которая становится бесполезной, когда нет пользователя.Итак, чтобы сэкономить ресурсы, я бы хотел, чтобы он знал, когда / находится ли дисплей в спящем режиме.

Есть специальная статья об уведомлениях о пробуждении / сне от apple, но в ней рассматриваютсятолько в режиме сна компьютера и без дисплея.

Есть ли способ для приложения переходить в режим гибернации, когда дисплей находится в режиме сна?

Спасибо

Ответы [ 3 ]

9 голосов
/ 24 августа 2011

Служба DisplayWrangler отправляет уведомления о том, когда дисплей выключится:

// Doesn't include error checking - just a quick example
io_service_t displayWrangler;
IONotificationPortRef notificationPort;
io_object_t notification;

displayWrangler = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceNameMatching("IODisplayWrangler");
notificationPort = IONotificationPortCreate(kIOMasterPortDefault);
IOServiceAddInterestNotification(notificationPort, displayWrangler, kIOGeneralInterest, displayPowerNotificationsCallback, NULL, &notification);

CFRunLoopAddSource (CFRunLoopGetCurrent(), IONotificationPortGetRunLoopSource(notificationPort), kCFRunLoopDefaultMode);
IOObjectRelease (displayWrangler);

Тогда обратный вызов выглядит примерно так:

void displayPowerNotificationsCallback(void *refcon, io_service_t service, natural_t messageType, void *messageArgument)
{
   switch (messageType) {
   case kIOMessageDeviceWillPowerOff :
      // This is called twice - once for display dim event, then once 
      // for display power off
      break;
   case kIOMessageDeviceHasPoweredOn :
      // Display powering back on
      break;
   }
}
5 голосов
/ 19 марта 2013

Это ответ на вопрос, заданный некоторое время назад, но я подумал, что было бы полезно добавить мой ответ.

NSWorkspace имеет несколько уведомлений о том, когда на дисплее просыпаются и спят: NSWorkspaceScreensDidSleepNotification и NSWorkspaceScreensDidWakeNotification

1 голос
/ 08 февраля 2011

Поскольку я не смог найти ни одного звонка, вызванного переключением дисплея в спящий режим (может быть, заставка делает это? Очень вероятно, что он активируется до того, как система перейдет в спящий режим), я бы предложил определять время простоя вручнуюа затем сравнивая его с настройками режима сна. В этой статье рассказывается, как получить время простоя от IOKit, и вы сможете легко получить текущие настройки сна, например, с помощью "pmset -g | grep sleep".

Через две минуты послеопубликовав вышесказанное, я обнаружил инструмент командной строки с открытым исходным кодом, который, вероятно, очень поможет вам в этом: SleepWatcher , кажется, может сделать именно то, что вы просили.

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