2023年5月16日火曜日

ファイルとフォルダーを隠す機能をカスケードメニューにする

ファイルとフォルダーを一瞬で隠す機能をサブメニューへまとめます。

ファイルとフォルダは消えました 何から何まで消えました 嫌なことだけ消えません

前回作成した右クリックのシステム属性を付ける機能をカスケード表示にしてすっきりさせます。

新規に Shell メニューの入れもの、画像の表示モードのところを作成するだけです。

ファイルとフォルダーを隠すメニューを 1 つにまとめる方法

  1. レジストリキーを作成します。HideSelected は任意の文字列です。

    HKCU\SOFTWARE\Classes\AllFilesystemObjects\shell\HideSelected

  2. SubCommands (文字列値)を作成。

  3. HideSelected/shell キーを作成、前回の 2 つの シェルメニュー hideshow を追加します。

    詳細は RegFile を参照してください。

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\Classes\AllFilesystemObjects\shell\HideSelected]
"MUIVerb"="@shell32.dll,-38214"
"Icon"="imageres.dll,-5314"
"SubCommands"=""
"Extended"=""
"SeparatorBefore"=""

[HKEY_CURRENT_USER\SOFTWARE\Classes\AllFilesystemObjects\shell\HideSelected\shell\hide]
"MUIVerb"="@shell32.dll,-37574"
"Icon"="shell32.dll,-261"

[HKEY_CURRENT_USER\SOFTWARE\Classes\AllFilesystemObjects\shell\HideSelected\shell\hide\command]
@="attrib +s +h \"%1\""

[HKEY_CURRENT_USER\SOFTWARE\Classes\AllFilesystemObjects\shell\HideSelected\shell\show]
"Icon"="shell32.dll,-16803"
"MUIVerb"="@shell32.dll,-31335"

[HKEY_CURRENT_USER\SOFTWARE\Classes\AllFilesystemObjects\shell\HideSelected\shell\show\command]
@="attrib -s -h \"%1\""

完成図

解説

SubCommands は面白い性質を持っていて、値だけ書き込むと今回のようなカスケードメニューになり、CommandStore/shell 以下のキー名をデータに持つと該当する機能を呼び出します。

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore

SubCommandsCommandStore を利用すると shell コマンドは無効になるため併用はできません。

注意点として、SubCommands から CommandStore の機能を呼び出しても組み合わせにより動作しないことが結構な頻度で発生します。

MUIVerb でメニューに表示する文字を設定しています。

@shell32.dll,-38214表示モード

Icon はエクスプローラーのリボンと同じものを指定しています。

imageres.dll,-5314

あとがき

実は、こちらを先に作ったのですが、内容が煩雑になりすぎたため分割しました。詳細は絶対に見られたくないファイルとフォルダーを一瞬で隠すを参照してください。

また、保護されたオペレーティング システム ファイルを表示しない (推奨)をオンオフする機能もコンテキストメニューに組み込むよう検討してみました。

reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced /v ShowSuperHidden /t REG_DWORD /d 1 /f

レジストリはうまく制御できるのですが、途中で F5 (更新)が必要なのと、フォルダー オプションにバグらしき挙動がみられるため保留中です。

うまくいったら公開したいと考えています。