2011年8月15日月曜日

コンピューターアイコンに便利な機能を付ける 3

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"


元に戻す

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]