2012年10月6日土曜日

Windows をスリープ状態に移行させる方法まとめ

【まえがき】

hiyohiyoさんのblog 「Windows 8 用 スリープ/再起動/シャットダウン スクリプト」 にて、Windowsの終了コマンドを実行するためにSendKeys が使われていたのが気になったので、他にどういった実装方法があるのか調べてみました。
 また、各方法の実装方法をまとめました。

【一覧表】



【各方法に関する補足】

  • 表中 ※1
    • WindowsNT系列のOSでは、メソッド実行の際 SE_SHUTDOWN_NAME 特権が必要
      • MSDN(English)には 、SetSuspendStateメソッドもSE_SHUTDOWN_NAME特権が必要と書かれているが、実際にはなくても実行可能。 (Guestアカウントでも可)
  • 表中 ※2
    • 自動復帰ができなくなる(例えば、タスクスケジューラのスケジュールや、テレビの録画予約などが実行されなくなる)ため非推奨。
  • 余談

【C#のサンプルコード】

【より進んだ使い方】


ひがんばな日記録 - 忍者 だれだよ、サスペンドと休止状態に rundll32.exe を使えるって言ったのは……
復帰後については SetThreadExecutionState を叩いてあげて、アクティブであることを伝えてあげると再度スリープ状態に陥ってしまうの(ちょっと気の利きすぎた仕様)を回避することができるでしょう。

【参考記事】