2011-02-08 18 views
1

ユーザがいないときには役に立たないアプリケーションユーティリティがあります。ですから、リソースを節約するために、いつディスプレイがスリープ状態にあるかどうかを知りたいと思います。ディスプレイがスリープ状態にあるかどうかを確認するか、スリープ通知を受信する

りんごの目覚め/睡眠に関する通知はdedicated articleですが、コンピュータの睡眠のみを扱い、睡眠を表示しません。

ディスプレイがスリープ状態にあるときにアプリケーションを「休止状態」にする方法はありますか?

答えて

1

ありがとう、私は(多分スクリーンセーバーがそれ?It'sは、システムがスリープ状態に落ちる前でキックする可能性が非常に高いん)眠りに落ちるディスプレイ、I'によって発行されたすべてのコールを見つけるcouldn'tので、アイドル時間を手動で検出し、それを表示スリープ設定と比較することをお勧めします。 This articleでは、IOKitからアイドル時間を取得する方法について説明しています。現在のスリープ設定を簡単に取得できるはずです。 「pmset -g | grep sleep」と入力します。

上記を投稿してから2分後に、私はオープンソースのコマンドラインツールを発見しました。おそらく多くの人に役立つでしょう。は、あなたが求めたことをすることができるようです。

+0

おかげで、私はそれをチェックアウトします! SleepWatcherは、アプリケーションに直接組み込まれるだけのシンプルなようです。 –

8

DisplayWranglerサービスは、ディスプレイの電源がオフになるときの通知を送信します。

// Doesn't include error checking - just a quick example 
io_service_t displayWrangler; 
IONotificationPortRef notificationPort; 
io_object_t notification; 

displayWrangler = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceNameMatching("IODisplayWrangler"); 
notificationPort = IONotificationPortCreate(kIOMasterPortDefault); 
IOServiceAddInterestNotification(notificationPort, displayWrangler, kIOGeneralInterest, displayPowerNotificationsCallback, NULL, &notification); 

CFRunLoopAddSource (CFRunLoopGetCurrent(), IONotificationPortGetRunLoopSource(notificationPort), kCFRunLoopDefaultMode); 
IOObjectRelease (displayWrangler); 

その後、コールバックは、このようなものになります。

void displayPowerNotificationsCallback(void *refcon, io_service_t service, natural_t messageType, void *messageArgument) 
{ 
    switch (messageType) { 
    case kIOMessageDeviceWillPowerOff : 
     // This is called twice - once for display dim event, then once 
     // for display power off 
     break; 
    case kIOMessageDeviceHasPoweredOn : 
     // Display powering back on 
     break; 
    } 
} 
5

をこれは、しばらく前に尋ねた質問への応答であります - 私の答えを追加すると便利だと思った。

NSWorkspaceが表示されますが、目覚めと睡眠ときの通知のカップルを持っていますNSWorkspaceScreensDidSleepNotificationとNSWorkspaceScreensDidWakeNotification

関連する問題