「Windows 7大百科」が待望の書籍化!!著者阿久津良和氏による560ページにおよぶWindows 7の大百科。著者: 阿久津良和 A5判560ページ 定価2,079円http://www.amazon.co.jp/dp/4839935513/(Amazon.co.jp)

本稿は「レッツ! Windows 7」と題して、Windows 7の便利な機能を中心に、初心者が判断に悩む設定や、気付きにくい場所に設けられた設定を解説していきます。Windows 7から初めてコンピュータに触る方はもちろん、Windows XP/Vistaからアップグレードした方も是非ご覧ください。また、読者からの質問をお待ちしておりますので、本稿末尾にあるリンクから投稿をお願い致します。今回は久々にWindows 7の電源管理に関する設定方法を紹介しましょう。









レッツ! Windows 7 - デスクトップ編(1)
レッツ! Windows 7 - デスクトップ編(2)
レッツ! Windows 7 - デスクトップ編(3)
レッツ! Windows 7 - 電源管理編(1)
レッツ! Windows 7 - 電源管理編(2)
レッツ! Windows 7 - 電源管理編(3)
レッツ! Windows 7 - ユーザーインタフェース編(1)
レッツ! Windows 7 - ユーザーインタフェース編(2)
レッツ! Windows 7 - Windows Update編(1)
レッツ! Windows 7 - ユーザーインタフェース編(3)
レッツ! Windows 7 - ユーザーインタフェース編(4)
レッツ! Windows 7 - デバイス編(1)
レッツ! Windows 7 - ホームグループ編(1)
レッツ! Windows 7 - ユーザーインタフェース編(5)
レッツ! Windows 7 - Windows XP Mode編(1)
レッツ! Windows 7 - Windows XP Mode編(2)
レッツ! Windows 7 - Windows XP Mode編(3)
レッツ! Windows 7 - Windows Media Player 12編(1)
レッツ! Windows 7 - Windows Media Player 12編(2)
レッツ! Windows 7 - ユーザーインタフェース編(6)
レッツ! Windows 7 - ユーザーインタフェース編(7)
レッツ! Windows 7 - システムメンテナンス編(1)
レッツ! Windows 7 - トラブルシューティング編(3)
レッツ! Windows 7 - リモートデスクトップ編(1)
レッツ! Windows 7 - リモートデスクトップ編(2)
レッツ! Windows 7 - リモートデスクトップ編(3)
レッツ! Windows 7 - バックアップ・復元編(1)
レッツ! Windows 7 - バックアップ・復元編(2)
レッツ! Windows 7 - Windows XP Mode編(4)
レッツ! Windows 7 - システムメンテナンス編(2)
レッツ! Windows 7 - システムメンテナンス編(3)
レッツ! Windows 7 - システムメンテナンス編(4)
レッツ! Windows 7 - 検索編(1) レッツ! Windows 7 検索編(2)

最後にスリープを解除したデバイスを確認する

以前、夜半にスリープが突如解除されてしまうトラブルを解決するためのテクニックを紹介しましたが、そもそも"何が原因でスリープが解除されたのか"原因を追及できた方がより簡単でしょう。紹介した「スリープから復帰するデバイスを選択する」というカスタマイズテクニックでも使用した「powercfg.exe」コマンドを使いますと、このスリープを解除したデバイスを確認することが可能です。

管理権限を持った状態でコマンドプロンプトを起動し、「powercfg -lastwake」と実行してください。これでスリープを解除したデバイスが表示されました。ここでチェックしたいのが「Description」「Instance Path」の二つ。前者は記述や解説といった意味で、デバイスマネージャーなどに表示される「デバイスの説明」。後者はベンダーIDなどを用いてデバイスにユニークな数値を割り当てるもので、Windows 7上でも「インスタンスパス」として確認できます(図01~03)。

図01 [Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「cmd」と入力して<OK>ボタンをクリックします

図02 ユーザーアカウント制御が有効になっている環境では、<スタート>メニューの検索ボックスに「cmd」と入力し、列挙された「cmd.exe」を右クリック。メニューから<管理者として実行>をクリックして、

確認をうながすダイアログの<はい>ボタンをクリックしてください

図03 コマンドプロンプトが起動したら「powercfg -lastwake」と入力して[Enter]キーを押してください。これでスリープを解除したデバイスが表示されます

しかし、今回の例のように「USB Root Hub」がスリープを解除したデバイスと言われてもピンと来ないでしょう。ここで「powercfg -devicequery wake_armed」を実行してください。これでユーザーもしくはコンピュータがスリープ解除を許可したデバイスが列挙されます。図04のようにデバイスが一つだけなら、探すのは簡単ですが、図05のように複数のデバイスが列挙されてしまうと直接判断することはできません。このような場合はデバイスマネージャーからスリープ解除を行なった確認しましょう(図04~05)

図04 コマンドプロンプトに「powercfg -devicequery wake_armed」と入力して[Enter]キーを押せば、スリープ解除を許可するデバイスが列挙されます

図05 こちらは異なるコンピュータでの実行結果。このように複数のデバイスが列挙された場合、スリープ解除を行なったデバイスを探すのが面倒になります

デバイスマネージャーを起動し、表示形式を「デバイス(接続別)」に変更します。今回のターゲットは「USB Root Hub」と、それにぶら下がる「ThinkPad USB Keyboard with TrackPoint」ですので、「ACPI x64-based PC」→「PCIバス」→「Intel(R) ICH10 Family USB Enhanced Host Controller - 3A3A」と展開しましょう。なお、各デバイス名はお使いのコンピュータによって異なり、階層も構成によって異なりますので、ご自身の環境に合わせて読み替えてください。

ここでターゲットの名称「USB Root Hub」を展開していきますと、もう一つのターゲットである「ThinkPad USB Keyboard with TrackPoint」が見つかりました。「USB Root Hub」をダブルクリックし、プロパティダイアログを起動したら<詳細>タブにあるドロップダウンリストから「デバイスインスタンスパス」を選択してください。図03で確認したものと同じインスタンスパスなら、「ThinkPad USB Keyboard with TrackPoint」によってスリープが解除されたことが証明されたことになります(図06~09)。

図06 [Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「devmgmt.msc」と入力して<OK>ボタンをクリックします

図07 デバイスマネージャーが起動したら、<表示>メニューから<デバイス(接続別)>を選択します

図08 デバイスを順番に展開し、PCIバス下にあるUSBアイコンを持つデバイスを展開していきましょう。図03と図04で確認したデバイスを発見したらダブルクリックします

図09 <詳細>タブのドロップダウンリストから「デバイスインスタンスパス」を開き、図04の結果と同じ数値を持っていれば検証完了です

コンピュータの構成はユーザーによって異なり、スリープ解除を行なったデバイス名も十人十色。そのため、今回は大まかな手順となりましたが、意図しないスリープ解除が行なわれている場合、「powercfg -lastwake」コマンドで確認したデバイスが誤動作していないか、ユーザーが直接操作しないデバイスの場合は関連するタスクが登録していないか確認してみましょう(図10)。

図10 こちらはノートPCのディスプレイを閉じるとスリープに移行する環境で「powercfg -lastwake」を実行した例。同機能の実行する「ACPI Lid」がスリープを解除したデバイスとして示されています

スリープの実行を邪魔している原因を探す

今度は正しく設定し、稼働中のアプリケーションにも不審な気配がないにもかかわらず、スリープモードが実行されない場合を想定してみましょう。スリープを除外する原因として想定されるのが、ほかのコンピュータ上のファイルを参照している場合や、デバイスドライバが原因でスリープを実行できない場合、アプリケーションやサービスなどがスリープの実行を阻止している場合など。

そもそもWindows OSには、「SetThreadExecutionState」というAPIが用意されており、動画再生や演算処理などコンピュータを操作せず、特定の作業を自動実行している最中に、アプリケーションの実行情報をシステムに通知し、スリープの実行を抑制します。ちなみに、MSDNの解説ページをご覧になりますと、Windows NTや2000など古いOSの名前しか見かけませんが、Windows 7でも動作しますのでご安心ください(図11)。

図11 動画ファイルの編集で有名な「AviUtl」も、バージョン0.99i3からSetThreadExecutionStateを使うことで、エンコード中のスリープ実行を抑制しています

さて、ある程度コンピュータの操作に慣れている方なら、スリープの実行を阻止している原因を何となく推測することができますが、より確実に探し当てる場合は、「powercfg.exe」コマンドを使いましょう。新た搭載された「-requests」オプションを使用しますと、Windows 7のスリープ実行を阻止しているドライバやプロセスなどが列挙されます。

まずはお手元の環境で「powercfg -requests」をお試しください。すると、「DISPLAY」「SYSTEM」「AWAYMODE」と三種類のカテゴリに各ドライバやプロセスなどが列挙されたのではないでしょうか。もちろん現時点でスリープの実行を阻止しているプロセスが存在しない場合、何も表示されません。阻止しているプロセスが存在しますと、図13のようにドライバやプロセスが列挙されます(図12~13)。

図12 管理者権限を得た状態でコマンドプロンプトを起動し、「powercfg -requests」と入力して[Enter]キーを押してください。画面の例では、スリープの実行を阻止しているデバイスやプロセスが存在しないため、「なし。」と表示されます

図13 こちらはスリープの実行を阻止するデバイスやプロセスが存在している例。

それでは同コマンドによる結果の確認方法を紹介しましょう。「DISPLAY」カテゴリ(正しくは電源要求の種類)は、省電力設定によって実行される「ディスプレイの電源を切る」を阻止するプロセスやデバイスが列挙されます。

「SYSTEM」カテゴリは、スリープの実行を阻止するプロセスやデバイスが列挙され、図13ではスリープの実行を阻止している実際のプログラムとして「[PROCESS] \Device\HarddiskVolume1\Users\kaz\Desktop\Test.exe」が。ネットワーク上の共有リソースからファイルをコピーしているため、「[PROCESS] \Device\HarddiskVolume1\Windows\explorer.exe」「[DRIVER] \FileSystem\rdbss」が列挙されています。

そして最後の「AWAYMODE」は、Windows Vistaから搭載されたAway(退席中)モードを指しています。そもそも同OSおよびWindows 7では、コンピュータがスリープ状態でも、TVコンテンツやストリームメディアをほかのデバイスに記録するなど、バックグラウンドのメディアタスクを処理する機能が搭載されています。同カテゴリは、このAwayモードの実行を阻止しているデバイスやプロセスが「SYSTEM」カテゴリと同じように並ぶのです。

今回の例ではネットワークファイルのコピーを中断し、「Test.exe」を終了させればスリープの実行が可能になりますが、スリープが正しく実行されない環境では、「SYSTEM」カテゴリにデバイスが列挙されているのではないでしょうか。その際は特定のデバイスやプロセスに対する電源要求の優先を設定する「-requestsoverride」オプションを使いましょう。

具体的には「powercfg -requestsoverride {種類} {プロセスもしくはドライバ名} {要求}」と実行します。最初の引数である「種類」は「-requests」オプションの検出結果と同じものを指定しましょう。通常は「PROCESS」「SERVICE」「DRIVER」のいずれかとなります。「プロセスもしくはドライバ名」も「-requests」オプションで検出した名称をそのまま使用しましょう。そして「種類」は最初に列挙されたカテゴリを「DISPLAY」「SYSTEM」「AWAYMODE」の三種類から一つ以上指定します。

図13の実行例に合わせると実行するコマンドは「powercfg -requestsoverride PROCESS \Device\HarddiskVolume1\Users\kaz\Desktop\Test.exe SYSTEM」となります。例えば特定のデバイスドライバがスリープを阻止している場合、「powercfg -requestsoverride DRIVER "デバイスドライバ名" SYSTEM」などとなりますが、「powercfg -requests」の検出結果を正しく反映させましょう。なお、操作結果は「powercfg -requestsoverride」と実行すると確認できます。誤って操作したときは「powercfg -requestsoverride PROCESS \Device\HarddiskVolume1\Users\kaz\Desktop\Test.exe」と、最後の「種類」を取り除いて実行してください(図14~15)。

図14 特定のデバイスやプロセスが原因でスリープモードを実行できない場合は、「powercfg -requestsoverride」を実行します。画面の例では特定プロセスの電源要求を変更するため、「powercfg -requestsoverride PROCESS \Device\HarddiskVolume1\Users\kaz\Desktop\Test.exe SYSTEM」と入力して[Enter]キーを押しました

図15 実行結果を確認するには「powercfg -requestsoverride」と入力して[Enter]キーを押してください。画面のように図14の操作結果が反映されています

ちなみに設定情報は、HKEYLOCALMACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerRequestOverrideキーに保存されます。Process、Service、Driverいずれかのサブキーを持ち、指定したプロセスもしくはドライバ名を名前としたDWORD値に、「DISPLAY」なら「1」、「SYSTEM」なら「2」、「AWAYMODE」なら「4」のデータ値が格納されます(図16~17)。

図16 [Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「regedit」と入力して<OK>ボタンをクリックします。ユーザーアカウント制御による確認をうながされる場合は、ダイアログの<はい>ボタンをクリックしてください

図17 図14で行なった操作の設定は、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerRequestOverrideキー下に保存されます

一連の操作を行なうことで、それまで阻止していたデバイスを使用し、プロセスが稼働中でも、スリープの実行を正しく実行できるようになる可能性があります。特にデバイスドライバは構造によってWindows 7のスリープ機能の相容れない場合がありますので、その際は残念ですが、スリープ機能をあきらめるか、同デバイスの使用を断念しましょう。

阿久津良和(Cactus