2018年1月10日水曜日

コマンドプロンプトやタスクスケジューラからPC をスリープ/サスペンドさせたい。(SetSuspendState)

解決方法

ネットが広大すぎて正解が分からなかったため、PCをスリープ (サスペンド) させるためだけのプログラムを自分で書いた。

SetSuspendState.zip (1 KB)

  • このzipファイルには、「SetSuspendState.exe」という実行可能ファイルが入っている。
  • SetSuspendState.exe」を実行すると、PCがスリープする
    ※事前の確認メッセージ等は一切出ない。
  • インストールやランタイムライブラリは不要。
  • 動作確認環境: Windows 7 Professional (x64) SP1

※上記プログラムは無保証です。ご利用は各自の自己責任でお願いします。

※リスクの一例として、万が一、スリープやスリープ後の復帰がうまくいかず、保存していなかったメモリ上のデータが失われるリスクもゼロではないため、各自で事前に動作確認をしてからご利用ください。


上記プログラムの説明

  • Windows の API関数 (SetSuspendState) を呼び出すだけのプログラム。
    SetSuspendState(FALSE, FALSE, FALSE)

    第1引数のFALSEは「サスペンド」を意味し、(「休止」か「サスペンド」かの二択)
    第3引数のFALSEは「復帰イベントの許可」を意味する。


上記プログラムのソースコード全文 (C++)

#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <powrprof.h>

void WinMainCRTStartup()
{
  ::SetSuspendState(FALSE, FALSE, FALSE);
  ::ExitProcess(0);
}

おまけ: 本質に関係のない技術的注釈

  • 実行可能ファイルのサイズを小さくしてみた。(3,072 バイト)
  • 「KERNEL32.dll」と「POWRPROF.dll」にしか依存していない。