Windows 8.1ミニTips (102) Windows 8.1の自動スリープ解除、原因を探って無効化する
○スリープ解除の問題を探す
Windows 8.1におけるスリープ解除の原因は各種デバイス、もしくはプログラムから発生するイベントのいずれかとなる。まずは管理者権限でコマンドプロンプトを起動し、「Powercfg」コマンドのオプション「LASTWAKE」を試して欲しい。こちらは最後にスリープ状態を解除した情報を表示するものだ。
上図のチェックポイントは「Type」と示された部分だ。「Fixed Feature」と示しているように、システムデバイスの1つである「ACPI Fixed Featureボタン」でスリープを解除したことを意味している。
例えばTypeが「Wake Timer」となる場合は、サービスやタスクがスリープを解除したことを示す。蛇足だが、LASTWAKEオプションはWindows 7時代の表記と異なり、デバイス名を指すInstance Pathが示されなくなったようだ。
次にチェックするのは、デバイスがスリープ解除している場合。こちらは条件にマッチするデバイスの一覧を示すオプション「DEVICEQUERY」と、条件としてスリープ状態を解除できるデバイスの一覧を返す「wakeprogrammable」、スリープ状態を解除できるように構成されたデバイスを返す「wakearmed」を使用する。
上図のように、ネットワークカードやキーボード、マウスがスリープ解除を可能にするデバイスであることが確認できた。さらに試したいのが、アクティブなスリープ解除タイマーを列挙する「WAKETIMERS」オプションだ。サービスやタスクによってスリープを解除するプログラムを確認するために用意され、前回の自動メンテナンスなどが含まれる。
そのほかイベントビューアーで確認する方法もあるが、コマンドラインから操作した方が提示される情報もシンプルで分かりやすいだろう。
○スリープ解除を行うデバイスを無効にする
スリープ解除の原因がデバイスにある場合、デバイスがスリープ状態を解除できないように変更するオプション「DEVICEDISABLEWAKE」を使用する。こちらは「powercfg /devicedisablewake "デバイス名"」と実行するため、「デバイスマネージャー」や先の「wake_programmable」を使って、デバイス名を確認して欲しい。
もっとも上図のように、「デバイスマネージャー」のプロパティダイアログにある「このデバイスで、コンピューターのスタンバイ状態を解除できるようにする」のチェックを外しても結果は同じだ。個別にダイアログを確認するよりも、コマンドラインから操作した方が簡単だが、お好みに応じて使い分けると便利だろう。
なお、スリープ解除を行っているのがウェイクタイマーの場合は、個別にタスクを無効にするか、前回紹介した電源プランの詳細設定でスリープ解除を無効にするのが簡単である。一概にどちらの方法がベストとは言い切れないので、ご自身のスタイルに合わせて選んで欲しい。
阿久津良和(Cactus)