本連載第211回では、Windows 10の「モダンブートメニュー」が実際にはレガシーなWin32アプリであることを紹介しました。その後、もう少しこのアプリで遊んでみたら、実に面白いものが出来上がりました。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
「モダンブートメニュー」(「イマーシブブートメニュー」とも呼びます)は、「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のように作成してみました(実際のバッチスクリプトは、さらに改良した別のバッチファイルをこの後示すので省略します)。
Copyright © ITmedia, Inc. All Rights Reserved.