ご存知の方が多いと思いますが、Windowsの機能には「電源オプション」というものが存在します。
省エネのために一定時間操作しないとスリープモードに突入してしまうのですが、
監視システムなどしばらく動かす必要のあるシステムの場合、この「スリープモード」が邪魔になることがあります。
今回は、.Net(C#,VB.net)でアプリ起動中に「スリープモード」にならないようにする方法を説明します。
まず、使用する関数ですが、WindowsのAPI関数「SetThreadExecutionState」を使用します。
関数の宣言は、下記のように宣言します。
'''''' スレッドが実行中であることをOSに通知する ''' ''' '''Private Declare Auto Function SetThreadExecutionState Lib "kernel32.dll" ( ByVal esFlags As Long ) As Long
また、上記の「SetThreadExecutionState」関数の呼び出し時の引数ですが、
'''''' SetThreadExecutionState関数の引数 ''' Private Enum EXECUTION_STATE As Integer '''システムでアクティビティとして通常認識されない操作を ''' スレッドが実行していることをシステムに通知します。 ES_SYSTEM_REQUIRED = &H1 '''システムでディスプレイアクティビティとして通常認識されない操作を ''' スレッドが実行していることをシステムに通知します。 ES_DISPLAY_REQUIRED = &H2 '''ほかの状態フラグがクリアされており、ES_CONTINUOUS を使った次の呼び出しまで ''' 設定済みの状態を維持する必要があることをシステムに通知します。 ES_CONTINUOUS = &H80000000 End Enum
を引数に渡せます。
(上記は列挙体で定義してますが、定数でもOK)
スリープモードにしないためには、
SetThreadExecutionState(EXECUTION_STATE.ES_SYSTEM_REQUIRED Or EXECUTION_STATE.ES_CONTINUOUS)
解除する場合は、
SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS)
とすることでスリープ抑制/解除が可能です。
上記の処理を、アプリや画面の起動時/終了時の処理に組み込めばOKです。