それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Shift押しながらの右クリックメニュー(Shellex)は認知度が低すぎる。

Windowsでは、Shift+右クリックメニューで表示内容が変わる。 MacOS(旧OSX)では、Optionを押すと右クリックメニューが変わる。

Shift + 右クリック( ShellEx)

右クリックメニュー(コンテキスト・メニュー)はすべて表示される。

右クリックメニュー(Shell)

右クリックメニューは通常使わないものを消しておくとスッキリする。

Shift+右クリック、知名度低すぎ?

色んな人のWindowsの使い方を見る機会があるのだけど、ほとんど認知されていなのが、Shift+右クリックメニュー。

ExcelでさえShift+右クリックを諦めた。

昔は、ExcelのメニューもShift+右クリックがあった。貼り付けオプション(形式選択して貼り付け)が、それだった。エクセルもShift+右クリックだった。しかし、認知されなくて、アイコン化された。

このエクセルのShift+右クリックメニュー廃止が、成功例としてエクスプローラーのメニューの今後の方向性になるのかと思ってたらWin11でそうだった。

win11 の方向性は悪くないが。

Win11ではどうなったのだろうか。というと、更に劣化していそうである。

「ユーザーが右クリックメニューを編集する機能」が必要だったと思う。

個人用PCでは問題ないが、レジストリを触れないため職場PCなどで不自由が生じていることは多分解決しない。

Shift+右クリックメニューで表示されるベンチ入り選手と、右クリックで表示されるスタメンの入れ替え機能がWin11には欲しかった。

アイコン表示じゃないんだよ。本当に必要なのは。

ベンチ入り・スタメン入れ替え機能が欲しかった。

本当にほしいのは、右クリックメニューの編集機能だったと思う。スタメンとベンチ入りと2軍の編集機能だったと思う。

しかし、右クリックメニューのClassesは多岐にわたるため、一般ユーザー向けではないと判断されたのだろうか。レジストリ変更を伴うから仕様変更が困難だと判断されたのだろうか。残念である。

Win10でユーザーチョイスで関連付けを変更ができるようになったのだから、右クリックメニューの編集機能が欲しかったのよねぇ。

Shift+右クリックメニューの編集方法

ShellMenuView というソフトウェアが、手軽に編集をさせてくれる。

https://www.nirsoft.net/utils/shell_menu_view.html

コレを使うと、スタメン落ち・2軍行きを切替え可能だ。

  • 該当項目をSet Extended Mode するとShift+右クリック(スタメン落ち)
  • 該当項目をDisable Selected Item するとメニューから抹消(2軍行き)

とできる。

項目が見つからないときは検索する

スタメン落ちとはShift+右クリックメニューが必要な項目とすることで、Shell->Shellex に変えるレジストリ操作に相当する。

2軍行きとは、メニューを非表示にする操作を意味し、項目は残すが、LegacyDisableキー追加するレジストリ操作に相当する。

LegacyDisableではなく、今どきは HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Blocked にエントリを追加するほうが良いかもしれないが。

レジストリ操作で消せるもの消したい。

レジストリ操作で消せるもの消してスッキリしたい

消せるものは極限まで消しておきたい。

Create Shortcut(ショートカット作成)は消せないし、送るメニューも消すことは出来ない。

レジストリで消せるものは限界まで消しておきたい。

ドキュメント類の制作の邪魔になるメニュー項目。

私は、たまに操作説明手順の書類を作るのだが、右クリックメニューが多すぎると、操作説明手順書が作りにくい。

余計なもの(VLCVSCode)が右クリックメニューにあると、スクショを編集したり、紛らわしい右クリックメニューが入っていると、操作手順を変えたものを説明する必要が出てきて面倒くさい。

スッキリしたメニューがよい

右クリックメニューに気軽に登録してくるマナーの悪いアプリケーションは嫌いです。

私達が本当に必要な右クリックメニュー

私達が本当に「必要な」右クリックメニューとは、ファイルを開くアプリケーションを選べることではないか。

例えば、.gitignore を開けるもの

例えば、package.json を開けるもの

例えば、Zipファイルを開くアプリケーションを選ぶ

こういうことではないか。右クリックメニューにアプリケーションが居座るのって整理出来てなくないか。

レジストリの探索方法

shmnview.exe でも消せない事があるので、そのときはレジストリを探索する。その場合知っておくべきことがある。

関連付けや右クリックメニューは、HKEY_CLASSES_ROOT(HKCR) になるが、HKCRはHKCUとHKCMを合成して表示するように再計算されたもの。

コレを知っておく必要がある。

HKEY_CLASSES_ROOT = HKEY_CURRENT_USER + HKEY_CURRENT_MACHINE

該当項目のなかで、ファイルタイプ以外にDrive , Directory , Directory/Background , DesktopBackground がエクスプローラー用に存在している。

ShellExとShellを入れ替えれば、目的は達成される。

昔は、移動がとてもめんどくさかったが、今は、Powershellのコマンドでとても手軽になった。

例えば、VSCodeが「Drive」のメニューにすら出てるのをやめさせたい。

$from = 'HKLM:\SOFTWARE\Classes\Drive\shell\VSCode' 
$to   = 'HKLM:\SOFTWARE\Classes\Drive\shellex\VSCode'
Move-Item -LiteralPath $from -Destination $to

パーミッションエラー

更に最近は、レジストリUACですら書き換えられない場合がある。

Ps はパーミッションエラーでもキーが存在しないメッセージを返すので、さらに面倒くさい。

Move-Item : Cannot delete a subkey tree because the subkey does not exist.

一つ上の階層を書き換える。

上位階層からサブ(下位)のパーミッションを上書きする。

例えば、HKLM\SOFTWARE\Classes\Drive\shell\Powershell の所有者は、SYSTEMだが、SYSTEMにフルコントロールが存在しない。

TrustedInstaller にはフルコントロールが存在する。

TrustedInstallerになるのはちょっと面倒くさいので。

上位の所有者を書き換えて、サブコンテナも合わせて上書きする。

HKLM\SOFTWARE\Classes\Drive\shell\Powershell の上位だから `HKLM\SOFTWARE\Classes\Drive\shell\ を上書きする。

もとの所有者がSYSTEMの場合に、SYSTEMを上書きするのは手間が多いので、とりあえず適当なユーザー(Adminなど)書き換えて、SYSTEMに戻す。戻すとき、連動してサブツリーの所有者が修正される。

パーミッションを開いて

所有者をAdminなどに書き換えて、

所有者をSYSTEMに戻す。

戻すときに、サブツリー(子孫コンテナ)も合わせて上書きされるので、フルコントロールが手中に返却される。

まとめて消す例

PowershellでまとめてShellExへ移動させる例

foreach( $path in "Drive", "Directory","Directory\Background" ){
  foreach ( $name in "WSL", "PowerShell", "git_gui", "git_shell", "cmd" ) {
    $from = "HKLM:\SOFTWARE\Classes\$path\shell\$name"
    $to   = "HKLM:\SOFTWARE\Classes\$path\shellex\$name"
    Move-Item -LiteralPath $from -Destination $to
  }
}

パーミッションの書き換えも、そのうちにPowershellで作りたい。