OSX でディスプレイが電源切れたことを検知したい

おもむろに Xcode のドキュメントを検索すると CGGetOnlineDisplayList とかいう関数が見つかったので

#include <CoreFoundation/CoreFoundation.h>
#include <ApplicationServices/ApplicationServices.h>

int main (int argc, const char * argv[]) {
    CGDisplayCount    displayCount;
    CGDirectDisplayID displays[4];
    int               i;

    CGGetOnlineDisplayList(4, displays, &displayCount);

    for (i = 0; i < displayCount; ++i) {
        CGRect rect = CGDisplayBounds(displays[i]);
        printf("%d: %.0fx%.0f ( ", i, rect.size.width, rect.size.height);

        if (CGDisplayIsActive(displays[i]))
            printf("active ");

        if (CGDisplayIsAsleep(displays[i]))
            printf("sleep ");

        if (CGDisplayIsBuiltin(displays[i]))
            printf("builtin ");

        if (CGDisplayIsMain(displays[i]))
            printf("main ");

        if (CGDisplayIsOnline(displays[i]))
            printf("online ");

        printf(")\n");
    }

    return 0;
}

とかいうのを書いてみた。これで、

$ ./dispinfo
0: 1280x800 ( active builtin main online )
1: 1024x768 ( active online )

とかいう出力が得られる。

のだけど、ディスプレイの電源(上記の1)を切ってもこのプログラムの出力は全く変わらない。ケーブルを抜くと出力から消える。

ここではケーブルは指したままで、ディスプレイの電源が落ちたことを検知したいという状況なので全然使えない。。

どーしたらいいんだろ?

by typester / at 2009-03-17T02:30:00 / osx / Comments(0)