2011-06-30 10 views
7

'Windows電源管理'でディスプレイがオフになっている場合、Windows 7およびXPでプログラムでチェックインする方法はありますか? (私がイベントを受け取ることができるなら、それはさらに良いでしょう。)Windows電源管理によってディスプレイがオフになっていることを確認します。

+1

なぜ知りたいですか?あなたはそれを元に戻すことができますか? 「このアプリケーションが実行されているときに、キーボード/マウスの操作が多くなるわけではありませんが、アイドル状態になっているわけではありませんので、画面を空白にしない」(たとえば、ビデオプレーヤーの場合)ということがあります。それがあなたならば、それを知らせるよりもブランキングを防ぐほうがいいですよね? –

+0

類似:http://stackoverflow.com/questions/328490/monitoring-a-displays-state-in-python –

+0

IMSVidDeviceをチェックアウトできます:msdn.microsoft.com/en-us/library/dd694519(VS.85) ).aspx –

答えて

7

私はそれがXPのためにできるとは思わない。 Windows 7には、電源管理に関連するあらゆる種類の特典があります。 Windows API Code Packは、C#またはVBから簡単に呼び出すことができ、Windowsのパラダイム(イベントシンク、Windows メッセージ、関数ポインタなど)を.NETのもの(デリゲートやイベントなど)にマップする管理されたラッパーのセットです。

using Microsoft.WindowsAPICodePack.ApplicationServices; 

// . . . 
     PowerManager.IsMonitorOnChanged += new EventHandler(MonitorOnChanged); 
// . . . 
    void MonitorOnChanged(object sender, EventArgs e) 
    { 
     settings.MonitorOn = PowerManager.IsMonitorOn; 
     AddEventMessage(string.Format("Monitor status changed (new status: {0})", PowerManager.IsMonitorOn ? "On" : "Off")); 
    } 

編集:WindowsのAPIコードパックに

リンク:Windows API Code Pack: Where is it?

使用したい場合、それだけで好きにに記載されていることは、あなたが好きかもしれないいくつかのコードで、ここで、コードパックが付属していますこの投稿を確認してください:https://stackoverflow.com/a/27709672/846232

+0

ありがとう。私はちょうどそのライブラリをダウンロードするためのリンクを追加します:) – sczdavos

+0

http://stackoverflow.com/a/9858981/1025177(変更 "(isRunning)"から "(isRunning || !PowerManager.IsMonitorOn)」)は、両方の種類のスクリーンセーバをカバーすることができます。D – BloodyRain2k

1

あなたのアプリケーションでは、SC_MONITORPOWERをwParamに入れたWM_SYSCOMMANDメッセージが表示されます(最初に0xfff0でwParamを確認してください)。スクリーンセーバーが(SC_SCREENSAVE)で起動すると、同様のメッセージが送信されます。あなたの目標がスクリーンをオフにすることを妨げているならば、ユーザがパスワードを設定しても動作しませんが、スクリーンに0を返すことができます。

+0

アプリケーションのウィンドウがアクティブなウィンドウでない場合は、これも機能しません。 – Dunk

関連する問題