スリープの抑止、モニター電源オフの抑止のサンプルコード †WinAPIのSetThreadExecutionStateを使って、スリープの抑止(モニターの電源はオフされます)や サンプルコードを使ったソースを公開 †本サンプルコードを元に通知エリアに常駐する PreventZzz をオープンソースで公開していますので参考にしてください。
動作確認環境 †
サンプルコードの説明 †C#, Visual Basic(VB)ともにSetThreadExecutionState APIを使った3つの関数(メソッド)を実装しています。
使い方 †起動すると以下のメッセージが表示されますので、対応する数字キーを押してください。
サンプルコード †以下にC#, Visual Basic(VB)のサンプルコードを記します。 C# †using System; class Program { static void Main(string[] args) { Console.WriteLine("1.スリープの抑止(モニターはオフされます)"); Console.WriteLine("2.モニターオフの抑止(スリープも抑止されます)"); Console.WriteLine("3.抑止の解除"); Console.WriteLine("9.終了"); for (; ; ) { Console.Write("> "); ConsoleKeyInfo sel = Console.ReadKey(); if (sel.Key == ConsoleKey.D9) break; switch (sel.Key) { case ConsoleKey.D1: Win32ApiExecutionState.PreventSleep(); break; case ConsoleKey.D2: Win32ApiExecutionState.PreventMonitorPowerOff(); break; case ConsoleKey.D3: Win32ApiExecutionState.Reset(); break; default: Console.Write(" <-?"); break; } Console.WriteLine(); if (ConsoleKey.D9 == sel.Key) break; // exit for } } } public static class Win32ApiExecutionState { [System.Runtime.InteropServices.DllImport("kernel32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto, SetLastError = true)] static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags); [FlagsAttribute] public enum EXECUTION_STATE : uint { ES_SYSTEM_REQUIRED = 0x00000001, ES_DISPLAY_REQUIRED = 0x00000002, ES_AWAYMODE_REQUIRED = 0x00000040, ES_CONTINUOUS = 0x80000000, } public static void PreventMonitorPowerOff() { SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS | EXECUTION_STATE.ES_DISPLAY_REQUIRED | EXECUTION_STATE.ES_SYSTEM_REQUIRED); } public static void PreventSleep() { SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS | EXECUTION_STATE.ES_SYSTEM_REQUIRED); } public static void Reset() { SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS); } } Visual Basic(VB) †Imports System Imports System.Runtime.InteropServices Module Module1 <FlagsAttribute> Public Enum EXECUTION_STATE As UInteger ES_SYSTEM_REQUIRED = &H1 ES_DISPLAY_REQUIRED = &H2 ES_AWAYMODE_REQUIRED = &H40 ES_CONTINUOUS = &H80000000UI End Enum <DllImport("kernel32.dll")> Function SetThreadExecutionState(esFlags As EXECUTION_STATE) As EXECUTION_STATE End Function Sub Main() Console.WriteLine("1.スリープの抑止(モニターはオフされます)") Console.WriteLine("2.モニターオフの抑止(スリープも抑止されます)") Console.WriteLine("3.抑止の解除") Console.WriteLine("9.終了") While True Console.Write("> ") Dim sel As ConsoleKeyInfo = Console.ReadKey() If sel.Key = ConsoleKey.D9 Then Exit While Select Case sel.Key Case ConsoleKey.D1 PreventSleep() Case ConsoleKey.D2 PreventMonitorPowerOff() Case ConsoleKey.D3 Reset() Case Else Console.Write(" <-?") End Select Console.WriteLine() If ConsoleKey.D9 = sel.Key Then Exit While End While End Sub Sub PreventMonitorPowerOff() SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS Or EXECUTION_STATE.ES_DISPLAY_REQUIRED Or EXECUTION_STATE.ES_SYSTEM_REQUIRED) End Sub Sub PreventSleep() SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS Or EXECUTION_STATE.ES_SYSTEM_REQUIRED) End Sub Sub Reset() SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS) End Sub End Module 以上、SetThreadExecutionState API を使ってスリープ、モニタオフの抑止を行うサンプルコードでした。 |