Mac OS X具有省电功能,可让OS关闭显示器。是否有API可以在代码中检测显示器当前处于打开还是关闭状态?
最佳答案
请查看IOKit的电源管理部分。 http://developer.apple.com/library/mac/#documentation/DeviceDrivers/Conceptual/IOKitFundamentals/PowerMgmt/PowerMgmt.html#//apple_ref/doc/uid/TP0000020-TPXREF104
您可能可以使用IORegistryExplorer并在要查找的设置上找到带有状态信息的节点。 Mac上可能有多个处于不同状态的监视器,因此您必须枚举树以查找具有所需类类型的所有节点。
sleep 状态在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()的函数。不确定是否可以访问。
希望能有所帮助。