ウィンドウズを再起動してスリープ

今回のテーマ: Popup関数によるカウントダウン、電源制御

ウィンドウズでは通常の電源オフの他に、「サスペンド」「休止状態(ハイバネーション)」というものがあります。

電源オフとは違い、次に電源を入れたときに、電源オフにする前の状態を復元します。これにより、起動時間の短縮ができたり、電源オフにする前の作業をそのまま続行することができたりします。

サスペンドの場合、PCの維持に必要な最低限の電力だけを残して、ほとんどの電力の供給を停止します。メリットとして、次回電源オンの際に、ほぼ待ち時間無しでPCが起動します。デメリットは、完全な電源オフと違い電力を消費することと、停電などがあった場合、作業内容が失われてしまうこです。

休止状態は、メモリの内容をハードディスクに待避して、電源を落とします。完全に電源を落としてしまうので通常の電源オフとほぼ同じ状態になり、コンセントを抜いても、次回電源オンの際は元通りに復帰します。その反面、メモリの内容をハードディスクに待避・復帰するため、サスペンドよりも時間がかかります。大容量のメモリを搭載したPCの場合、待ち時間はさらに長くなります。

ウィンドウズVistaの場合、この中間に位置する「スリープ」という状態も用意されているらしいのですが、わたしがVistaを使用していないので説明は省きます。

以下、「サスペンド」「休止状態」をまとめて「省電力状態」として説明します。

省電力状態は便利なのですが、電源オフとは違いシステムの再起動は行われないため、長期間使用しているとシステムが不安定になる可能性があります。

アプリケーションが使用したメモリーをウィンドウズに返さなかったり、長期間使用していると不安定になる常駐ソフトがあったりもします。

たまには再起動してあげたいところなのですが、そうなると再起動が終わるまでPCが使用できなくなります。できればPCを使っていないときに再起動したいところです。

詳しい人ならタスクスケジューラーを使って、PCを使わない夜中などに再起動を行うこともできなくはありません。が、単純に再起動するとそのままPCの電源が入ったままになってしまいます。

コマンドラインの"SHUTDOWN"コマンドや、あるいはオンラインソフトなどで入手できる、電源制御ソフトなどを使う方法です。

そこで、「再起動を行い、再起動が終わったら自動で省電力状態に入る」スクリプトを作ってみました。

再起動スクリプトダウンロード


プログラムコードの表示

(プログラムコードがここに表示されます)

起動すると、再起動を行ってよいか確認を行うメッセージボックスを表示します。再起動を行ってよければ「OK」を、やめる場合は「キャンセル」を選択します。一定時間(既定では30秒)経過すると、自動で実行されます。

タスクマネージャーなどで自動実行することを想定した仕様です(後述)

再起動が終わると、次の起動時に省電力状態へ移行してよいかの確認があります。「OK」を選択するか、そのまま(既定では3分間)放置すると、省電力状態へ移行します。

既定での3分間は、システムが起動して各種常駐ソフトなどをロードしてシステムが安定するまでの時間を、約3分として設定しました。この時間はスクリプトを編集することで調整可能です。

このスクリプトの編集可能な部分は、3行目と4行目の"Const"で始まる2カ所です。ここの数字を変更することで、再起動確認待ち時間・省電力移行待ち時間を変更することができます。


このスクリプトは、そのまま使ってもいいのですが(たとえば、PCの電源オフの代わりに使用する、など)、前述の通りタスクマネージャーに登録することを想定して作成されています。

たとえば、「夜中の3時に再起動」したり、「仕事に行って留守にしている昼間に再起動」などの使い方です。

タスクマネージャーの使い方まで説明すると長くなるのでやめておきますが、最近のPCであればタスクマネージャーのスケジュールで、省電力状態から復帰してプログラムの実行を行うことができます。

タスクのプロパティで、「設定」タブの「電源の管理」に、「タスクの実行時にスリープを解除する」というチェックボックスがあり、これをオンにすることで、設定時刻にPCの電源が自動で入り、プログラムが実行されます。

「スケジュール」で「日単位」「3:00」「1日に1回」などを設定すれば、毎日自動で再起動が行われます。あるいは、「毎週水曜・土曜の15:00」などの設定も可能です。


仕様および注意点について

自動ログオンが必須です

複数ユーザーがPCを使用する環境は考慮していません。また、再起動後に自動でログオンされる設定のPCでのみ動作します。つまり、個人の自分専用PC以外では正常に動作しません。これは仕様です。

このスクリプトは再起動の直前に、スタートアップに省電力状態への移行を登録します。再起動が終わったときにそのショートカットが起動され、省電力状態への移行確認(およびそのショートカットの削除)を行うためです。つまり、スタートアップが処理されない環境では動作しません。

自動でログオンする設定になっていない場合、マイクロソフトのTweakUIなどを利用して自動的にログオンするように設定すれば、このスクリプトが使用できます。

再起動は強制的に行われます

再起動が行われるときに、編集中のドキュメントなどがあった場合(ワードやエクセルなどを開いたまま、編集中のドキュメントを保存せずに省電力状態に移行した場合など)、その編集は破棄され、強制的に再起動がかかります。

留守中に再起動をスケジュールしていて、PCの電源が入りっぱなしになるのを避けるためにこうしました。「編集中のドキュメントがあった場合、そのままなにもしない(電源も入ったままになる)」ように変更は可能ですが、あえてそれは無視しました。必要であれば

Shell.Run "shutdown -r -f -t 0"

の行を

Shell.Run "shutdown -r -t 0"

と書き換えてください(" -f"を削除。これが"SHUTDOWN"コマンドで強制的に再起動するオプションです。詳しくはウィンドウズのヘルプを参照してください)。

サスペンドと休止状態

省電力状態としてサスペンドになるか休止状態になるかは、環境に依存します。

基本的に、休止状態が有効なシステムでは休止状態となり、そうでなければサスペンドとなります。つまり、普段はサスペンドを使用しているが、休止状態も使えるように設定しているという環境でも、休止状態になります。


閑話休題

余談ですが、このスクリプトを作った動機が。

いや、余談なので読まなくていいです・・。

I○-DATA(一部伏字)の地デジキャプチャユニット"GV-MVP/HZ2"というのを最近購入しまして、これで地デジの予約録画をしたりしてるのですが。

これがまた最悪。

録画開始時刻になると自動でPCが起動(※省電力状態から復帰)し、録画を始めるはずなのですが、たまに録画開始に失敗して常駐ソフトが強制終了してるのです。

どの程度の頻度かというと、まぁ、せいぜい録画予約の2分の1程度が失敗するだけだとか、毎日録画の番組が3日続けて録画に失敗してるとかその程度なのですが。

・・・って、つかえねー!!

おかげで「マリ見て(第4期)」第1話から録画に失敗したとか(3話も録画失敗)、他の番組の2話と3話が見れなかったとか、まぁ、けっこう買ったことを後悔してたりするのですが。

まぁ、マリ見て以外はうれしがって深夜アニメを録画しまくってるだけなので、実害は低かった(よくこんなの見る人がいるなぁ、というのも多いんですね深夜アニメって・・。1~2話だけ見て予約削除)のが不幸中の幸いではありますが。

そういやPSX(PS2内蔵HDDレコーダー)買ったときも無駄に深夜アニメ録画したな・・。

あんまりひどいのでI○のサポートに問い合わせ(これがまた、受け付ける気があるのかというぐらい激しく面倒だったりするのですが・・)したら、「ドライバのインストールに失敗したんじゃねぇの?最初からやり直せよこのトーシロが(かなり意訳)」みたいなメールが来ただけとか・・。

予約・視聴ソフトの操作性も悪いどころか、「これ、ほんとに出荷前にテストしてるのか・・?」レベルのおかしな動作したりとか、特定の「ユーザーが当たり前にやるはずの」操作をすると、必ず強制終了する(再現率100%)とか、もう絶対にI○データの製品は二度と手を出すまいと感じさせる逸品だったりします。

それはさておき、そんな出来損ないの常駐ソフトでも、いっそ1日1回PCを再起動すれば、それなりに安定するのではないかなー・・と。