移動とコピーをコンテキストメニューに付ける の第二弾です!
SubCommands を使って簡単に実装します。
というのが建てまえで、SubCommands の問題点をレポートします。
-
レジストリキーを作成。organize は任意の名前です。
HKCU\SOFTWARE\Classes\AllFilesystemObjects\shell\organize
-
organize キーへ値を設定します。
-
Icon (文字列値) : shell32.dll,-16753
-
MUIVerb (文字列値) : @shell32.dll,-31411
-
SubCommands (文字列値) : Windows.CopyToBrowser;Windows.MoveToMenu
-
-
AllFilesystemObjects キーへ戻り、SeparatorBeforeAndAfter (文字列値) を作成します。
完成図
[HKEY_CURRENT_USER\SOFTWARE\Classes\AllFilesystemObjects]
"SeparatorBeforeAndAfter"=""
[HKEY_CURRENT_USER\SOFTWARE\Classes\AllFilesystemObjects\shell\organize]
"Icon"="shell32.dll,-16753"
"MUIVerb"="@shell32.dll,-31411"
"SubCommands"="Windows.CopyToBrowser;Windows.MoveToMenu"
解説
SubCommands のデータが呼び出す機能です。
Windows.CopyToMenu がコピー先のみ、Windows.CopyToBrowser が場所の選択を表示する大きい画面です。
Windows.CopyToMenu
Windows.CopyToBrowser
移動も同様に、Windows.MoveToMenu と Windows.MoveToBrowser に該当します。
今回のカスタマイズを Windows.CopyToBrowser と Windows.MoveToBrowser に揃えると2階層目のメニューでどちらか判断できません。
それでは、Windows.CopyToMenu と Windows.MoveToMenu はというと、実はこの組み合わせは動作しないのです。
SubCommands | メニュー表示 | |
Windows.CopyToBrowser | Windows.CopyToMenu | 2つメニューが出る |
Windows.CopyToBrowser | Windows.CopyToBrowser | 2つメニューが出る |
Windows.CopyToBrowser | Windows.MoveToBrowser | 2つメニューが出る |
Windows.CopyToBrowser | Windows.MoveToMenu | 2つメニューが出る |
Windows.CopyToMenu | Windows.CopyToMenu | コピー(Menu)のみ |
Windows.CopyToMenu | Windows.CopyToBrowser | コピー(Menu)のみ |
Windows.CopyToMenu | Windows.MoveToMenu | コピー(Menu)のみ |
Windows.CopyToMenu | Windows.MoveToBrowser | コピー(Menu)のみ |
CopyTo を MoveTo へ置き換えても結果は同じ。ToMenu が先頭にあると、その項目しか表示されない。
Shell で実装しても同じ。REG_EXPAND_SZ 値にしても同じ。HKLM に設定しても同じ結果です。
何かの知識が不足しているとは思いますがコンソールをまとめてカスケードメニューにする記事でも動かない組み合わせがあり、調べてみると、該当箇所でバッファオーバーフローが発生しており、バグの疑いも残ります。
そもそもSubCommandsはエクスプローラーのリボンで利用されており、メニューで使うことは想定されていないのでしょう。
といっても、実際にメニューで使えることは間違いないので、動作しないパターンがあるのを踏まえて、試しながら実装するしかありませんね。