Subcommands を使うとメニューを階層構造にできます。
全て説明するとあまりにも長くなってしまうので、ポイントだけ取り上げてみます。
基本的な、ContextMenu の追加の方法は、少しですが 当ブログ でやっているので良かったら見ていってください。
元からある、管理ツールのキーを流用しています。
HKCR\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage
Subcommands (文字列値) を追加します。
キーの既定値にデータがあると動作しないため削除します。
Manage\command キーは、Subcommands があると無視されます。元々存在する管理ツールのコマンドですので、そのままにしてあります。
Manage\shell キー以降は、通常の Shell メニューと同じ構造になっています。
Subcommands を使用する場合は Shell キーの既定値や、"Position"="Top" | "Position"="Bottom" で並び順が指定できませんので、管理が一番上になるように、項目の先頭に数字を付けています。
Manage\shell\01Manage\command の管理ツールのコマンドは既定値が展開可能な文字列値でないと動作しません。
さらにもう一つ、ネストすることもできます。
最初の図の設定例です。
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage]
@=""
"subcommands"=""
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\01Manage]
"HasLUAShield"=""
"SuppressionPolicy"=dword:4000003c
"MUIVerb"="@%systemroot%\\system32\\mycomput.dll,-400"
"SeparatorAfter"=dword:00000001
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\01Manage\command]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,43,00,6f,00,\
6d,00,70,00,4d,00,67,00,6d,00,74,00,4c,00,61,00,75,00,6e,00,63,00,68,00,65,\
00,72,00,2e,00,65,00,78,00,65,00,00,00
; %SystemRoot%\system32\CompMgmtLauncher.exe
; Device Manager
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\devmgr]
"Icon"="devmgr.dll,4"
@="@devmgr.dll,-4"
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\devmgr\Command]
@="mmc.exe /s devmgmt.msc"
; Disk Management
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\Diskmgmt]
@="@dmdskres.dll,-65535"
"Icon"="dmdskres.dll"
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\Diskmgmt\Command]
@="mmc.exe diskmgmt.msc"
; Event Viewer
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\Eventvwr]
@="@miguiresource.dll,-101"
"Icon"="miguiresource.dll,0"
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\Eventvwr\Command]
@="eventvwr.exe"
; Services
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\Service]
@="@filemgmt.dll,-2204"
"Icon"="filemgmt.dll"
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\Service\Command]
@="mmc.exe /s services.msc"
; Task Schedule
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\Taskschd]
@="@miguiresource.dll,-201"
"Icon"="miguiresource.dll,1"
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\Taskschd\Command]
@="mmc.exe /s taskschd.msc"
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage]
@=""
"subcommands"=""
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\01Manage]
"HasLUAShield"=""
"SuppressionPolicy"=dword:4000003c
"MUIVerb"="@%systemroot%\\system32\\mycomput.dll,-400"
"SeparatorAfter"=dword:00000001
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\01Manage\command]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,43,00,6f,00,\
6d,00,70,00,4d,00,67,00,6d,00,74,00,4c,00,61,00,75,00,6e,00,63,00,68,00,65,\
00,72,00,2e,00,65,00,78,00,65,00,00,00
; %SystemRoot%\system32\CompMgmtLauncher.exe
; Device Manager
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\devmgr]
"Icon"="devmgr.dll,4"
@="@devmgr.dll,-4"
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\devmgr\Command]
@="mmc.exe /s devmgmt.msc"
; Disk Management
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\Diskmgmt]
@="@dmdskres.dll,-65535"
"Icon"="dmdskres.dll"
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\Diskmgmt\Command]
@="mmc.exe diskmgmt.msc"
; Event Viewer
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\Eventvwr]
@="@miguiresource.dll,-101"
"Icon"="miguiresource.dll,0"
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\Eventvwr\Command]
@="eventvwr.exe"
; Services
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\Service]
@="@filemgmt.dll,-2204"
"Icon"="filemgmt.dll"
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\Service\Command]
@="mmc.exe /s services.msc"
; Task Schedule
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\Taskschd]
@="@miguiresource.dll,-201"
"Icon"="miguiresource.dll,1"
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell\Taskschd\Command]
@="mmc.exe /s taskschd.msc"
元に戻す
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage]
@=hex(2):40,00,25,00,73,00,79,00,73,00,74,00,65,00,6d,00,72,00,6f,00,6f,00,74,\
00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,6d,00,\
79,00,63,00,6f,00,6d,00,70,00,75,00,74,00,2e,00,64,00,6c,00,6c,00,2c,00,2d,\
00,34,00,30,00,30,00,00,00
"subcommands"=-
[-HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell]
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage]
@=hex(2):40,00,25,00,73,00,79,00,73,00,74,00,65,00,6d,00,72,00,6f,00,6f,00,74,\
00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,6d,00,\
79,00,63,00,6f,00,6d,00,70,00,75,00,74,00,2e,00,64,00,6c,00,6c,00,2c,00,2d,\
00,34,00,30,00,30,00,00,00
"subcommands"=-
[-HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Manage\shell]