検索
連載

「モダンブートメニュー」アプリで遊んでいたら、高機能(?)シャットダウン/再起動ツールができちゃったその知識、ホントに正しい? Windowsにまつわる都市伝説(215)

本連載第211回では、Windows 10の「モダンブートメニュー」が実際にはレガシーなWin32アプリであることを紹介しました。その後、もう少しこのアプリで遊んでみたら、実に面白いものが出来上がりました。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
「Windowsにまつわる都市伝説」のインデックス

Windowsにまつわる都市伝説

「モダンブートメニュー」でもっと遊ぼう!

 「モダンブートメニュー」(「イマーシブブートメニュー」とも呼びます)は、「Windows 8」から導入された、タッチ操作対応の新しいブートメニューです。タッチ操作に対応できるように、このメニューはブートの最終段階で表示され(表示される場合)、既定のブートエントリを選択すればすぐにログオン画面に切り替わりますし、別のブートエントリやトラブルシューティングツールを選択すると、一度、再起動してから選択したものが実行されます。

 本連載の第211回では、モダンブートメニューが「C:\Windows\System32\Bootim.exe」というWin32アプリケーションであること(イマーシブ《UWP》アプリではなく!)、それがブートの最終段階の「Windowsログオンアプリケーション(Winlogon.exe)」から開始されていること、レガシーブートメニュー環境では使える起動直後の[F8]キーや[F10]キーが使えなくなる理由、ログオン後に通常のWin32アプリケーションとしてエクスプローラーからのダブルクリックや「コマンドプロンプト(cmd.exe)」から実行できることとその挙動、アクセス権による表示の違いなどについて解き明かしました。

 通常のWin32アプリケーションとして実行した場合、「PCの電源を切る」を選択しても電源が切れないなど、選択されたメニューに対応した挙動にならないのは、呼び出し元(「Winlogon.exe」ではない「cmd.exe」)が何もしないからです。

 では、呼び出し元がやればいいということで、バッチファイル(.cmd)でモダンブートメニューの戻り値を取得して、対応させてみることにしました。

 簡単なバッチファイルを作って、「bootim.exe」の戻り値(%ERRORLEVEL%で取得可能)を調べてみると、「PCの電源を切る」を選択した場合の戻り値は「641」で、「続行」(管理者として実行した場合に表示)を選択した場合の戻り値は「0」でした。管理者として実行した場合に表示される他の項目については面倒なのでひとまず省略します。

本当にシャットダウンできるようにしてみた

 というわけで、「PCの電源を切る」と「続行」の処理に対応したバッチファイルを以下の画面1のように作成してみました(実際のバッチスクリプトは、さらに改良した別のバッチファイルをこの後示すので省略します)。

画面1
画面1 モダンブートメニューの「続行」(戻り値:0)と「PCの電源を切る」(戻り値:641)に対応したバッチファイル

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る