本記事ではWindows10・11のパソコンのスリープを自動でON・OFFする方法をご紹介しています。
他のサイトを参考にしてもうまくいかなかったので、改良を加えた方法をご紹介しています。
先日、会社の節電対応として毎日のパソコンのスリープが必須になりました。
でも、パソコンをスリープにすると、リモートデスクトップ接続ができなくなってしまうんですよね。
在宅勤務なので困っちゃいますね…
実は、平日の同じ時間に自動でスリープを設定・解除する方法があるんです!
気になるところへGO!
必須設定:パソコンのスリープ設定を変更しよう

自動でスリープを解除するためには、パソコンのスリープ設定を変更する必要があります。
なので、画像の①のように検索で『電源プランの編集』を検索して、②クリックして実行してください。

『プラン設定の編集』の画面が表示されると思いますので、③『詳細な電源設定の変更』をクリックしましょう。

バッテリ駆動の項目が無いんですけど…
それはノートパソコンだけに表示される項目なので、デスクトップであれば表示されなくてもOKです!
電源オプションの詳細設定が表示されたら、④『スリープ』の『+』マークをクリックして、設定項目を展開させましょう。

そして、⑤の設定を次のように変更してから、⑥『OK』を押してください。
- 次の時間が経過後スリープする :なし
- ハイブリッドスリープを許可する:オフ
- 次の時間が経過後休止状態にする:なし
- スリープ解除タイマーの許可 :有効
スリープや休止状態はOFFでいいんですか…?
はい!そうしないとスリープを自動解除したのにもう一度スリープになってしまいます。
たしかに、それだと意味がないですもんね!
ハードディスクを使用している場合は、追加設定をした方が安心です。
その場合は、もう一度『電源オプションの詳細設定』を開きましょう。
そして、次の画像のように『ハードディスクの電源を切る』を⑦『なし』に変更し、⑧『OK』をクリックしておきましょう。

SSDを使用しているパソコンの場合、ハイブリットスリープや休止状態は使わないほうが良いです。
メモリ内の数GBのデータをSSDに何回も書き込むことになるので、SSDの寿命がかなり短くなってしまいます。
共通設定:タスクの作り方の手順

では、パソコンの設定ができたのでタスクスケジューラでタスクを作成していきます。
本記事で作成するタスクの例は、平日の8時にスリープを解除する『Wake』と平日の20時に自動でスリープにする『Sleep』というタスクになります。
まずは、Wake・Sleepの両タスクで共通する設定をご説明していきますね。
画像の①のように検索で『タスク スケジューラ』を検索して、②クリックして実行してください。

タスクスケジューラが開いたら、右側にある③『タスクの作成』を選択しましょう。

全般のタブが選択された状態で、タスクの作成画面が表示されたと思います。
名前に④『Wake』と入力し、⑤『ユーザーまたはグループの変更』をクリックしてください。

説明の欄は記入してもしなくてもOKです。
次ような画面が表示されると思います。

選択するオブジェクト名の部分に⑥『SYSTEM』と入力して⑦『OK』をクリックしてください。
SYSTEMにすると良いことがあるんですか…?
管理者権限を持った状態で実行できるので、パスワード入力がいらなくなるんです。
次の画面に移動したら、⑧にチェックを入れて⑨のOSの種類を選び、⑩『トリガー』のタブを選択しておきます。

ここまでは共通設定なので、次はWakeの詳細設定をしていきます!
了解っす!
毎日同じ時間で自動でスリープを解除するタスクの詳細設定

では、平日の8時にスリープを自動的に解除するタスクの設定をしていきます。
こちらの画面が表示されていると思いますので、①『新規(N)』をクリックしてください。

②を『8:00:00』に変更してから③『毎週』を選択し、④『月~金』にチェックを入れて⑤『OK』をクリックします。

先ほどのタスクの作成画面に戻りますので、⑥『操作』のタブを選択して⑦『新規』をクリックしてください。

こちらの画面では、スリープを解除するプログラムを入力していきます。
⑧に『cmd.exe』を、⑨に『/c echo hello』を入力して⑩『OK』をクリックしてください。

どんなプログラムなんですか…?
コマンドプロンプト(黒い画面)を起動して『hello』と表示するプログラムです。
タスクの作成画面に戻りますので、⑪『条件』のタブを選択して、⑫『タスクを実行するためにスリープを解除する』にチェックを入れてから⑬『OK』を選択します。

これでスリープ解除の設定はOKです!
意外と簡単でしたね!
毎日同じ時間に自動でスリープするタスクの詳細設定

続いては平日の20時に自動的にスリープ状態にするタスクを作成していきます。
やり方はスリープ解除タスクの設定とほぼ変わりません。
なので、まずは共通設定手順③~⑨を行い、タスク作成のトリガー設定画面を開いてください。
タスクの名前はSleepにしておいてくださいね!
共通設定が終わったら、トリガーのタブを開いていると思いますので、①『新規(N)』をクリックしてください。

②を『20:00:00』に変更してから③『毎週』を選択し、④『月~金』にチェックを入れて⑤『OK』をクリックします。

そして、⑥『操作』タブを選択して、⑦『新規』をクリックします。

そしたら、次の画像のように⑧に『powershell』、⑨に画像の下のコードをコピペして⑩『OK』をクリックしてください。

-command "Add-Type -AssemblyName System.Windows.Forms;[System.Windows.Forms.Application]::SetSuspendState(0,$true,$false)"
こちらはどんなプログラムなんですか…?
パソコンの電源状態を変更するプログラムになっています。
上記プログラムはWindowsに最初から含まれている処理を実行するプログラムです。
具体的には『System.Windows.Forms.dll』というファイルに書かれている『SetSuspendState』というメソッドを実行します。
ちなみに、()の中の3つの引数は次の意味を持っています。
- 休止モード(0でスリープ・1で休止)
- 強制的に休止にするか
- 外部による起床を許可するか
つまり、タスクスケジューラによる起床を許可したまま強制的にスリープすることができるようになります。
『rundll32.exe』を使用した自動スリープ方法を紹介しているサイトがありますが、あれは間違いです。
詳細説明は省略しますが、引数を指定しても『タスクスケジューラによる起床ができない休止モード』になることが分かっています。
プログラムを設定することができたら画面が戻りますので、『OK』をクリックしてタスクの作成を完了してください。
あれ?条件の設定はしなくていいんですか…?
はい!スリープ状態を解除するタスク以外は追加の設定は不要ですよ!
上手く起動しない時は…

以上で自動スリープと自動スリープ解除の設定は完了です。
ですが、ユーザーがログインしていないと再びスリープになってしまうことがあります。
その場合は、次の処理を行って設定を変更してください。
まずは、検索窓に①『cmd』と入力して②『コマンド プロンプト』を起動します。

次のコードを③にコピペしてEnterを押します。
powercfg -attributes SUB_SLEEP 7bc4a2f9-d8fc-4469-b07b-33eb785aaca0 -ATTRIB_HIDE

コマンドプロンプトは閉じてしまってOKです。
そのあとはもう一度、電源の詳細設定を開きます。

こちらの画像のように『システム無人スリープタイムアウト』が表示されるようになっているので、④を『0』に変更して⑤『OK』をクリックしてください。
そして、もう一度スリープの解除のタスクを実行してみましょう。
これでログインしていない時にスリープにならないようになりましたよ!
これでできました!
スリープ解除できませんでした。
すみませんスリープ解除できました。
ありがとうございました。