Programming Field - プログラミング Tips

Windows 10 15063 以降でディレクトリの右クリックメニューにコマンドプロンプトを表示させる(暫定)

スポンサーリンク

このページではWindowsのレジストリについて扱っています。Windowsの重要な設定も含まれているため、レジストリに対する操作は慎重に行ってください。レジストリの操作にあまり慣れていないときは事前のバックアップを強く推奨します。また、不用意にいろいろなデータを削除するとWindowsが起動しなくなる原因となります。なお、このページで生じた問題の責任は負いかねます。

Windows 10 15063 (Windows 10 Creators Update) からは、「ディレクトリ」のコンテキストメニューにおいてShiftを押しながらの場合にのみ表示される「コマンド ウィンドウをここで開く」が「PowerShell ウィンドウをここに開く」に変わっています。従来のコマンドプロンプトはPowerShellと比べると機能面など多くの面で劣ることは確かであり、可能であればPowerShellに移行していくのが良いと考えられます。

ただし、今までの慣れた環境で作業するなど、引き続きコマンドプロンプトを使用していきたい場合には以下の方法で「暫定」対応することができます。

※ 2017/06/03 - 値の意味について追記しました。

表示させる方法

ログインユーザーと同じユーザーでレジストリエディタを開き、「HKEY_CURRENT_USER\Software\Classes\Directory」以下に移動し(無ければ作成)、以下のように値をセットします。

より具体的には、「Directory\Background\shell\cmd」というキーと「Directory\shell\cmd」キーを作成し、中に DWORD 値「HideBasedOnVelocityId」を値「0」で作成します。

Regコマンドを使う場合は以下のようになります。

reg add HKCU\Software\Classes\Directory\shell\cmd /v HideBasedOnVelocityId /t REG_DWORD /d 0 /f
reg add HKCU\Software\Classes\Directory\Background\shell\cmd /v HideBasedOnVelocityId /t REG_DWORD /d 0 /f

以上の作業で、現在ログインしているユーザーに対してディレクトリの右クリックメニューからコマンドプロンプトを実行できるようになります。

また、ルートドライブについては別途設定が存在するため、「Drive\shell\cmd」に対しても同様に「HideBasedOnVelocityId」を作成する必要があります。

※ PowerShellを非表示にする場合は同様に「Powershell」以下のキーに「HideBasedOnVelocityId」を作成し、その値を16進数で「639bc8」などとします(元の cmd 側の値がこれではない場合はその値に合わせます)。なお、「ShowBasedOnVelocityId」より「HideBasedOnVelocityId」が優先されます。

解説

Windows 10 Creators Update では、HKEY_CLASSES_ROOT\Directory\shell\cmd 以下に新たに「HideBasedOnVelocityId」という値が作られています。「Powershell」というキーの中には「ShowBasedOnVelocityId」という値も作られており、少なくともこれらをもとにコマンドを表示させるかどうかの制御が行われていると考えられます。なお、実際にどのような値/意味を持っているかはこのページ作成時点では未調査です。

一方、HKEY_CLASSES_ROOT の説明ページでも触れていますが、ファイル関連付けなどの設定は「ユーザー別設定」と「システム設定」の2つを合わせた内容として取り扱われます。この際、データが参照される際は「ユーザー別設定」が優先して用いられるという点に注意する必要があります。「Directory」以下の情報は実際にはすべて HKEY_LOCAL_MACHINE\Software\Classes 以下に作成されていることから、HKEY_CURRENT_USER\Software\Classes 以下に同じ情報を作成することで実質的な「上書き」を行うことができるということになります。

「ShowBasedOnVelocityId」と「HideBasedOnVelocityId」については、内部で以下のような項目表示の制御に使用されているようです。

  1. (「SuppressionPolicy」または「SuppressionPolicyEx」で非表示にされる場合はそれが優先される)
  2. 「ShowBasedOnVelocityId」が存在して「0」ではなく、「0x639bc8」(※)ではない場合は非表示にする
  3. 「HideBasedOnVelocityId」が「0x639bc8」である場合は非表示にする
  4. 「ShowAsDisabledIfHidden」という値が存在する場合は非表示の代わりに無効化にする

※ 「0x639bc8」以外の(特定の)値かどうかもチェックしているようですが、「0x639bc8」も含め、チェックされる値は将来の更新によって変わる可能性があります

以上により、「HideBasedOnVelocityId」を「0」に上書き設定することで項目を表示できるようにすることができます。

なお、「暫定」と書いているのは以下の点に因ります。

そのため、あくまでも「自己責任で行うべき手順」といったことになります。