2011-02-09 20 views
7

Mac OS X'de, OS'nin monitörü kapatmasına izin veren bir güç tasarrufu özelliği vardır. Monitörün şu anda açık mı yoksa kapalı mı olduğunu tespit etmek için bir API var mı?Monitörün kapalı olup olmadığını kontrol etme

+0

olası yinelenen uygu durumunu dönmek gibi görünüyor bu kod biraz bulundu sonra

[ekran uykuda de olup olmadığını kontrol edin veya uyku bildirimleri almak] (http : //stackoverflow.com/questions/4929731/check-if-display-is-at-sleep-or-receive-sleep-notifications) –

+0

Tam olarak iki kopya değil; Bu soru bildirimleri arıyor, sadece mevcut durumu kontrol etmek istiyorum. –

cevap

3

IOKit'in güç yönetimi bölümüne göz atın. http://developer.apple.com/library/mac/#documentation/DeviceDrivers/Conceptual/IOKitFundamentals/PowerMgmt/PowerMgmt.html#//apple_ref/doc/uid/TP0000020-TPXREF104

IORegistryExplorer'ı kullanabilir ve aradığınız ayar hakkında durum bilgisi olan bir düğümü bulabilirsiniz. Farklı eyaletlerde bir Mac'te birden çok monitör olabilir, bu nedenle ihtiyacınız olan sınıf türüyle tüm düğümleri aramak için ağacı sıralamanız gerekir.

Uyku durumu, Darwin çekirdeğinde IOPMrootDomain.cpp dosyasında işlenir. İnanıyorum ki IOKit ile araştırabilirsin. gibi http://www.opensource.apple.com/source/xnu/xnu-1456.1.26/iokit/Kernel/IOPMrootDomain.cpp

şey:

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 bir işlevi yoktur getPowerState denilen(). Erişilebilir olup olmadığından emin değilim.

Bu yardımcı olur umarım.

+0

Harika, buna bir göz atacağım. Teşekkürler. –

4

IORegistryExplorer'ı kullandım ve IOPMrootDomain IOSleepSupported değerini kullandım ve monitör uykuda değilken true olarak kaydedildi (bu mantıklı olurdu, ancak yukarıdaki kodun monitörün mevcut uyku durumuna dönmeyeceğini tahmin ediyorum)). arama biraz düzgün ana monitörün

CGDisplayIsAsleep(CGMainDisplayID()) 
+0

'#include ' bu işlevlere erişmek için. –

İlgili konular