Windows10でもタスクスケジューラーでスリープ & 解除の設定をする

基本的には、下記のサイトのバッチをつかわせていただいていたのですが、
スリープからの復旧がどうしてもできなかった。
http://izmiz.hateblo.jp/entry/2015/02/18/214646

ので、下記のsuspend.exeでの運用に変更しています。
(ちなみに、hibernate.exeだと復旧はできなかった)
https://tipszone.jp/20110517_stop-pc/


■ 想定環境

・イベント時間: 17:00 ~ 24:00
それ以外は眠らせたい。

・PC

  • Windows10 Professional 64bit
  • アカウントのパスワードは「無し」に

・作るバッチ
1. イベント用アプリケーションをexitして、眠らせる
2. 起こして、PC再起動
3. PC起動時にイベント用アプリケーションを立ち上げる


■ 手順

1. バッチ作成
2. タスクマネージャーに各種バッチを登録
3. 電源周りの設定を変更


■ バッチ作成

1. イベント用アプリケーションをexitして、眠らせる

rem
rem goToSleep.bat
rem

echo "kill all apps and go to Hibernation"

taskkill /im "eventApp.exe" /f

timeout /T 10

cd "C:\bat"
start suspend.exe


2. 起こして、PC再起動

rem
rem wakeFromSleepAndReboot.bat
rem

echo "wake from sleep and reboot"

timeout /T 20

shutdown -r -t 10


3. PC起動時にイベント用アプリケーションを立ち上げる

rem
rem launchApps.bat
rem

echo "launch apps"

cd "C:\bat\"
start eventApp.exe

exit


4. スリープ用のスクリプトファイルをexeに変換

require 'Win32API'

# http://msdn.microsoft.com/en-us/library/aa373201(v=vs.85).aspx
setSuspendState = Win32API.new('powrprof.dll', 'SetSuspendState', %w(i i i), 'i')
setSuspendState.call(0, 0, 0)

※ こちらはexeが下記にあるので、そちらを使いました。
suspend.exe


■ タスクマネージャーに各種バッチを登録


最上位特権で実行にチェックを忘れずに


トリガーの設定



実行するプログラムをセット


タスクを実行するためにスリープを解除にチェック


その他の設定



スタートアップのバッチは、
「スタートアップ時」ではなく「任意のユーザーのログオン時」にしといたほうが良さそうでした。


詳細はこちらを参照
http://izmiz.hateblo.jp/entry/2015/02/18/214646


■ 電源周りの設定を変更


電源とスリープを自動で実行しないように。



電源オプションの「詳細な電源設定の変更」から、以下を設定

  • ハイブリッドスリープ -> オン
  • スリープ解除タイマーの許可 -> 有効



ファイヤーウォールを無効に



ついでに、win10では自動でスリープ解除される現象があるようで、
調べていくと下記の自動メンテナンスが原因っぽかったので、こちらも停止。
http://diy-ilands.com/2015/08/05/windows-10-sleep-mode/