Mac OS X具有省电功能,可让操作系统关闭显示器。是否有API可以在代码中检测显示器当前是打开还是关闭?
答案 0 :(得分:4)
我使用了IORegistryExplorer并检出了IOPMrootDomain IOSleepSupported值,并且当监视器没有睡眠时它注册为true(这是有道理的,但我猜想上面的代码不会返回监视器的当前睡眠状态)
经过一些搜索后,我发现这段代码似乎正确地返回了主监视器的睡眠状态
CGDisplayIsAsleep(CGMainDisplayID())
答案 1 :(得分:3)
您或许可以使用IORegistryExplorer找到一个节点,其中包含您正在寻找的设置的状态信息。 Mac上可以有多个不同状态的监视器,因此您必须枚举树,查找具有所需类类型的所有节点。
睡眠状态在Darwin内核中的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()的函数。不确定它是否可访问。
希望有所帮助。