2011-02-09 12 views
7

Mac OS Xには省電力機能があり、OSの電源を切ることができます。モニターに現在オンまたはオフに切り替えられているかどうかをコードで検出するAPIはありますか?モニタがオフになっているかどうかをプログラムで確認する

+0

が重複する可能性を返すように思われるコードのこのビットを発見しました://stackoverflow.com/questions/4929731/check-if-display-is-at-sleep-or-receive-sleep-notifications) –

+0

全く正確ではありません。その質問は通知を探している、私はちょうど現在の状態を確認したい。 –

答えて

3

IOKitの電源管理セクションを確認してください。 http://developer.apple.com/library/mac/#documentation/DeviceDrivers/Conceptual/IOKitFundamentals/PowerMgmt/PowerMgmt.html#//apple_ref/doc/uid/TP0000020-TPXREF104

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と呼ばれます。アクセス可能かどうかは不明です。

希望に役立ちます。

+0

すごく、これを見てみましょう。ありがとう。 –

4

IORegistryExplorerを使用して、IOPMrootDomain IOSleepSupportedの値をチェックしました。モニターがスリープ状態ではない間に登録されました(これは意味がありますが、上記のコードはモニターの現在のスリープ状態を戻さない)。

は、検索のビットの後、私はきちんとメインモニタのスリープ状態([ディスプレイがスリープ状態にあるか、スリープ通知を受け取るかどうかをチェック]のhttpの

CGDisplayIsAsleep(CGMainDisplayID()) 
+0

'#include 'これらの関数へのアクセスを取得します。 –

関連する問題