Программно проверить, не выключен ли монитор - PullRequest
7 голосов
/ 09 февраля 2011

Mac OS X имеет функцию энергосбережения, которая позволяет ОС выключать монитор.Есть ли в коде API для определения, включен ли монитор в данный момент или нет?

Ответы [ 2 ]

4 голосов
/ 13 апреля 2011

Я использовал IORegistryExplorer и проверил значение IOPMrootDomain IOSleepSupported, и оно было зарегистрировано как true, когда монитор не спал (что имеет смысл, но я предполагаю, что приведенный выше код не вернет текущее состояние сна монитора).

После небольшого поиска я нашел этот бит кода, который, кажется, правильно возвращает состояние сна основного монитора

CGDisplayIsAsleep(CGMainDisplayID())
3 голосов
/ 11 февраля 2011

Проверьте раздел управления питанием IOKit. http://developer.apple.com/library/mac/#documentation/DeviceDrivers/Conceptual/IOKitFundamentals/PowerMgmt/PowerMgmt.html#//apple_ref/doc/uid/TP0000020-TPXREF104

Возможно, вы сможете использовать IORegistryExplorer и найти узел с информацией о состоянии требуемой настройки. На Mac может быть несколько мониторов в разных состояниях, поэтому вам нужно перечислить дерево, ища все узлы с нужным вам типом класса.

Состояние сна обрабатывается в IOPMrootDomain.cpp в ядре Дарвина. Вы можете проверить это с IOKit, я верю. http://www.opensource.apple.com/source/xnu/xnu-1456.1.26/iokit/Kernel/IOPMrootDomain.cpp

Что-то вроде:

mach_port_t         masterPort;
io_registry_entry_t     root;
kern_return_t       kr;
boolean_t           flag = false;

kr = IOMasterPort(bootstrap_port,&masterPort);

if ( kIOReturnSuccess == kr ) {
    root = IORegistryEntryFromPath(masterPort,kIOPowerPlane ":/IOPowerConnection/IOPMrootDomain");
    if ( root ) {
        CFTypeRef data;

        data = IORegistryEntryCreateCFProperty(root,CFSTR("IOSleepSupported"),kCFAllocatorDefault,kNilOptions);
        if ( data ) {
            flag = true;
            CFRelease(data);
        }
        IOObjectRelease(root);
    }
}
return flag;

В IOKit есть функция getPowerState (). Не уверен, что это доступно.

Надеюсь, это поможет.

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