概要
ノートPCでは、バッテリー消費を抑える為に、よくPCのサスペンド・レジュームが使用されます。C#でPCのサスペンド・レジュームが行われたことを検出する為には、Microsoft.Win32.SystemEventsクラスのPowerModeChangedイベントにハンドラを登録します。
手順
動作確認用に、画面にTextBoxを1つ貼り付けます。

PowerModeChangedイベントを使用するために、まず、以下の形でイベントハンドラの登録・解除処理を作ります。
イベントハンドラはMicrosoft.Win32.SystemEventsクラスに登録します。
//******************************************************************************** /// <summary>コンストラクタ /// </summary> //******************************************************************************** public FormMain() { InitializeComponent(); //--------------------- // イベントを登録する //--------------------- Microsoft.Win32.SystemEvents.PowerModeChanged += new Microsoft.Win32.PowerModeChangedEventHandler( SystemEvents_PowerModeChanged ); } //******************************************************************************** /// <summary>画面クローズ時のハンドラ /// </summary> //******************************************************************************** private void FormMain_FormClosed( object sender, FormClosedEventArgs e ) { //--------------------- // イベントを解除する //--------------------- Microsoft.Win32.SystemEvents.PowerModeChanged -= new Microsoft.Win32.PowerModeChangedEventHandler( SystemEvents_PowerModeChanged ); } |
その上で、イベントハンドラの中身(上記の例ではSystemEvents_PowerModeChanged()メソッド)を実装します。第二引数で、サスペンド・レジュームのどちらが行われたかを取得できます。
//******************************************************************************** /// <summary>電源状態変更時のハンドラ /// </summary> //******************************************************************************** private void SystemEvents_PowerModeChanged(object sender, Microsoft.Win32.PowerModeChangedEventArgs e) { //---------------------- // 現在時刻を取得 //---------------------- String sysdate = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); //---------------------- // 電源状態を画面に表示 //---------------------- switch (e.Mode) { case Microsoft.Win32.PowerModes.Suspend: txtLog.Text += sysdate + " サスペンドされました。" + Environment.NewLine; break; case Microsoft.Win32.PowerModes.Resume: txtLog.Text += sysdate + " レジュームされました。" + Environment.NewLine; break; } } |
プログラムを実行させ、実際にサスペンド・レジュームを行うと画面にログが表示されます。

補足
Win32.SystemEvents.PowerModeChangedのイベントハンドラで取得できる状態は、以下の3つです。Resume:
オペレーティング システムが中断状態から再開されます。
StatusChange:
電源モードのステータス通知がオペレーティング システムで発生しました。
これは、バッテリ電力が低下した、バッテリの充電中、AC 電源とバッテリの間で移行しているなど、
システム電源のステータスが変化したことを示している可能性があります。
Suspend:
オペレーティング システムが中断されます。
参考文献
電源、バッテリーに関する情報を取得するPowerModeChangedで取得可能な状態一覧
休止状態復帰を検知しスクリプトを実行したい。
関連記事
コメントを残す