如何在Windows中创建上下文菜单子菜单?

时间:2011-12-09 17:13:29

标签: windows contextmenu

我一直在编写实用程序,并通过*的Shell键上的Regedit将它们映射到上下文菜单,但是我无法弄清楚如何像一些更受欢迎的实用程序那样制作子菜单。

例如,如果我有三个脚本来移动文件并将文件重命名为三个不同的文件夹,那么我现在有三个不同的上下文菜单条目。我宁愿有一个名为“移动和重命名......”的扩展到那三个。

5 个答案:

答案 0 :(得分:4)

您可以通过注册表WIN 7创建子菜单到上下文菜单,如here

所示
  建议首先

备份您的注册表!

此示例将带有单个命令的子菜单放入任何文件(不是文件夹或桌面)的右键上下文中。

菜单:

[HKEY_CLASSES_ROOT\*\shell\Custom Menu]
"MUIVerb"="Custom Tools"
"SubCommands"="Custom.copytoclip"

命令:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Custom.copytoclip]
@="copytoclip description here"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Custom.copytoclip\command]
@="cmd /c clip < %1"

请注意编辑注册表,其他版本的Windows可能会以不同的方式工作。

答案 1 :(得分:0)

您尚未指定使用的语言。无论如何,你需要做的是写一个Shell扩展。有一个指南,here

正如大卫所指出的,在C#This blog post解释它是不可能的。

答案 2 :(得分:0)

您必须编写自定义Context Menu Handler

答案 3 :(得分:0)

您可以使用子命令指定组/菜单名称并指定项目,例如 - 为 EXE 文件制作上下文菜单

group name: "InstallShield debug" 
group subcommands:InstDbg1;InstDbg2;InstDbg3;InstDbg4;InstDbg5;InstDbg6;InstDbg7 
group item1:  name: "debug installer /d" ; key  InstDbg1 
group item2:  name: "debug installer /d /v..." ; key  InstDbg2 
etc

用于此的 reg 文件是

Windows Registry Editor Version 5.00

;cascading context menu - use empty lines between registry items
;separator before: "CommandFlags"=dword:00000020
;SubCommands contains keys to be found in the registry - should match

KEY_CLASSES_ROOT\exefile\shell\InstallShield cascade menu]
"MUIVerb"="InstallShield debug"
"Icon"="C:\\Program Files (x86)\\InstallShield\\2020\\System\\isdev.exe"
"SubCommands"="InstDbg1;InstDbg2;InstDbg3;InstDbg4;InstDbg5;InstDbg6;InstDbg7"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\InstDbg1]
@=""
"MUIVerb"="debug installer /d"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\InstDbg1\command]
@="\"%1\" /d"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\InstDbg2]
@=""
"MUIVerb"="debug installer /d /v TEST_STATUS=Good"
"CommandFlags"=dword:00000020

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\InstDbg2\command]
@="\"%1\" /d /v\"TEST_STATUS=Good\""

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\InstDbg3]
@=""
"MUIVerb"="debug installer /d /v TEST_STATUS=Undetermined"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\InstDbg3\command]
@="\"%1\" /d /v\"TEST_STATUS=Undetermined\""

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\InstDbg4]
@=""
"MUIVerb"="debug installer /d /v TEST_STATUS=Unauthorized"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\InstDbg4\command]
@="\"%1\" /d /v\"TEST_STATUS=Unauthorized\""

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\InstDbg5]
@=""
"MUIVerb"="run installer /v TEST_STATUS=Good"
"CommandFlags"=dword:00000020

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\InstDbg5\command]
@="\"%1\" /v\"TEST_STATUS=Good\""

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\InstDbg6]
@=""
"MUIVerb"="run installer /v TEST_STATUS=Undetermined"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\InstDbg6\command]
@="\"%1\" /v\"TEST_STATUS=Undetermined\""

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\InstDbg7]
@=""
"MUIVerb"="run installer /v TEST_STATUS=Unauthorized"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\InstDbg7\command]
@="\"%1\" /v\"TEST_STATUS=Unauthorized\""

结果: enter image description here

答案 4 :(得分:0)

更专业的多深度子菜单可以通过Nilsof Shell创建,如下面的截图所示。

Nilesoft Shell screenshots