如何手动修改注册表为文件右键上下文菜单添加级联子菜单
纯注册表实现文件右键级联菜单操作方法
不需要第三方工具,按以下步骤配置即可实现右键文件显示MyPrograms父项、悬停展开2个自定义程序子项的效果,你之前配置异常基本是因为缺少子项绑定配置、父项误加了command项:
父菜单项修正配置
所有文件的右键菜单根路径为HKEY_CLASSES_ROOT\*\shell,找到你已经创建好的MyPrograms父项(路径为HKEY_CLASSES_ROOT\*\shell\MyPrograms),按以下要求调整值:
- 项的默认值(REG_SZ类型):数据填写
MyPrograms,即右键菜单显示的父项名称 - 若存在名为
SubCommands的字符串值请直接删除,该值仅适用于绑定系统内置命令,挂自定义子项会导致展开异常 - 新建字符串值(REG_SZ类型),名称为
ExtendedSubCommandsKey,数值数据填写*\shell\MyPrograms\SubCmds——该配置作用是告诉资源管理器,父项悬停展开的子菜单全部从指定的注册表分支读取,路径不需要带HKEY_CLASSES_ROOT前缀 - (可选)新建字符串值
Icon,数值填写父项要显示的图标路径,格式为"你的程序exe完整路径",0 - (可选)新建字符串值
Position,数值填Top或Bottom可控制父菜单项在右键列表中的顶部/底部位置 - 注意:父项仅作为展开容器,不要在MyPrograms项下面创建
command子项,否则会导致点击/展开逻辑异常
子菜单存放分支创建
在MyPrograms项下面新建一个名为SubCmds的项,完整路径为HKEY_CLASSES_ROOT\*\shell\MyPrograms\SubCmds,后续所有子菜单项都放在这个路径下,项名需要和上一步ExtendedSubCommandsKey填写的路径后缀完全一致。
两个自定义程序子项配置
在SubCmds项下,为两个调整文件大小的程序分别创建独立子项,每个子项结构和普通右键菜单项完全一致:
- 第一个程序子项配置:
- 在SubCmds下新建项,名称可自定义(比如
ResizeS,仅作注册表标识用,不会显示在菜单上),完整路径为HKEY_CLASSES_ROOT\*\shell\MyPrograms\SubCmds\ResizeS - 将该项的默认值修改为子菜单要显示的文字,比如
压缩为小尺寸 - (可选)新建字符串值
Icon,填写对应程序的exe路径作为子项图标 - 在ResizeS项下新建名为
command的子项 - 选中command项,将默认值修改为程序启动命令,格式为
"程序exe完整路径" "%1",其中%1是右键选中文件的路径传参,必须保留,否则程序无法获取你操作的目标文件
- 在SubCmds下新建项,名称可自定义(比如
- 第二个程序子项配置:
- 在SubCmds下新建项,名称自定义(比如
ResizeL),完整路径为HKEY_CLASSES_ROOT\*\shell\MyPrograms\SubCmds\ResizeL - 将该项的默认值修改为子菜单要显示的文字,比如
调整为大尺寸 - (可选)新建字符串值
Icon,填写第二个程序的exe路径作为子项图标 - 在ResizeL项下新建名为
command的子项 - 选中command项,将默认值修改为第二个程序的启动命令,格式同第一个程序,注意路径加英文双引号、末尾加
"%1"传参
- 在SubCmds下新建项,名称自定义(比如
配置生效操作
不需要重启电脑,执行以下任意一种操作即可让配置立即生效:
- 打开任务管理器,找到
Windows资源管理器进程,右键选择「重启」 - 以管理员身份打开命令提示符,执行命令:
taskkill /f /im explorer.exe && start explorer.exe
常见异常排查
- 父项带展开箭头但悬停没反应/点了报错:检查是否误删/写错
ExtendedSubCommandsKey的路径值,检查父项下面是否误建了command子项- 子菜单点击后程序没启动:检查command项的默认值,程序路径是否包裹了英文双引号,末尾是否加了
"%1"传递文件参数- 菜单显示乱码:检查菜单名称的字符是否符合当前系统区域设置,不要插入不可见控制字符
内容的提问来源于stack exchange,提问作者Donniekovski
相关产品推荐
相关产品推荐

