搜索
简帛阁>技术文章>定制右键功能,看这一篇就够了

定制右键功能,看这一篇就够了

注册表定制右键菜单

前言

  • 有时候有些经常用到的功能希望可以自定义加入右键菜单中,那么本文可以带你了解通过修改注册表方式定制右键菜单。
  • 特别注意修改注册表属于高危操作,不认识、不知道的注册表不要轻易删除或修改。在编辑注册表之前记得备份注册表。
  • 右键菜单分为很多种,后面我会介绍几个常用的情况,大致情况有下面几种:
      1. 桌面右击空白处弹出菜单
      2. 文件夹右击空白处弹出菜单
      3. 右击单个文件弹出菜单
      4. 右击多个文件弹出菜单
      5. 右击单个文件夹弹出菜单
      6. 右击多个文件夹弹出菜单
      7. 右击文件和文件夹组合时弹出菜单
  • 注册表对大小写不敏感,网上那些文档里面项的名字大小写各不相同,但都是生效的。

注册表参数

参数和解释

参数 解释
%* 所有参数,我测试结果是快捷方式的参数
%0、%1 文件路径
%2 - %9 第二到第九个参数,快捷方式的参数
%D 当前目录路径
%H 意义不明,但测试结果都是0
%I 意义不明,每次都是:num:num格式,每次都会改变
%L %1,不过是固定长路径,所以都说这个更好
%S 意义不明,但测试结果都是1
%V 文件路径
%W 当前文件的父目录的路径

验证参数

    为了验证上述参数我写了一个go的脚本来打印通过修改注册表时右键参数具体值。代码如下:

package main

import (
	"fmt"
	"os"
)

func main() {
	for _, v := range os.Args {
		fmt.Printf("[%s]\n", v)
	}
	fmt.Scanln()
}

    为方便copy,我把下面注册表的值放出来:

"C:\regedit\regedit.exe" "*: %*" "0: %0" "1: %1" "2: %2" "3: %3" "4: %4" "5: %5" "6: %6" "7: %7" "8: %8" "9: %9" "D: %D" "H: %H" "I: %I"  "L: %L" "S: %S" "V: %V" "W: %W"

    按照下图HKEY_CLASSES_ROOT\*\shell\regeditTest\command中添加上面那个命令行,测试右键单个文件结果如下:

  1. 右击文件为快捷方式时参数列表才有数据,已经测过不支持%10,右击文件时不会出现参数列表值。
  2. 右击文件为快捷方式时%W会有不一样的结果,当起始位置为空结果为快捷方式所在目录,当起始位置有填目录则结果就是填写的值。看下图:

注册表参数总结

  1. 知道每个参数的含义,那么在运行自己写的程序时就知道注册表里面的参数如何填写,不会有问题。
  2. 关于第二到第九的参数以及%W的特殊之处,我也是试出来的,因为看别人的博文写的不清楚。所以最好多查查资料搞清楚具体含义再使用会避免很多麻烦。

右击文件菜单配置

    1. 常用配置如下

配置键 配置含义
icon 菜单中显示的图标,一般用ico图标文件。也可以直接填exe可执行程序文件,此时直接用该可执行程序的图标。不填则不显示,文件不存在显示白板。
MuiVerb 菜单显示名字,不填则默认用注册表的名字
SubCommands 多级菜单时需要
MultiSelectModel 官方解释Single:右击单个文件、Document:最多选15个文件、Player:看文档,相当于没限制。经测试不要这一项用的Document限制

    2. 结果截图如下所示,当配置Single时多选文件右键会隐藏配置的菜单:

多级菜单

先添加一级菜单

    在HKEY_CLASSES_ROOT\*\shell\one下,增加一个子项SubCommands=two1;two2;two3,示例这三个值会在下一步作为注册表名。

再添加二级菜单

    在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell下面添加如下几个项,还可以添加三级菜单。

还可以添加三级菜单

    添加三级菜单也是在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell下面,如果需要可以添加更多级菜单。

看下效果图

    看下图,需要执行命令,则在图中对应的command中添加命令即可。

通过注册表文件创建

    可以先通过注册表工具先创建好可用的注册表配置,再右键一个个导出,然后用记事本把这些注册表合并在一起即可。

    下面是导出的配置组合,保存成.reg文件,双击执行即可完成注册表配置。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\one]
"icon"="C:\\regedit\\seting.ico"
"SubCommands"="two1;two2;two3"
"MuiVerb"="一级菜单"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\two1]
"MUIVerb"="二级菜单1"
"icon"="C:\\regedit\\seting.ico"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\two1\command]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\two2]
"MUIVerb"="二级菜单2"
"icon"="C:\\regedit\\seting.ico"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\two2\command]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\two3]
"MUIVerb"="二级菜单3"
"icon"="C:\\regedit\\seting.ico"
"SubCommands"="three31;three32"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\two3\command]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\three31]
"icon"="C:\\regedit\\seting.ico"
"MUIVerb"="三级菜单31"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\three31\command]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\three32]
"icon"="C:\\regedit\\seting.ico"
"MUIVerb"="三级菜单32"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\three32\command]

各种位置的注册表

右击桌面空白位置

    注册表位置:HKEY_CLASSES_ROOT\DesktopBackground\Shell\one,效果如下图所示。

右击文件夹

    注册表位置:HKEY_CLASSES_ROOT\Directory\shell\one,效果如下图所示。

对应文件后缀的打开方式

    这个通过注册表修改比较繁琐,我找到一个软件可以轻松搞定:FileTypesMan。当然可以按照下图所示HKEY_CLASSES_ROOT\.test自定义指定后缀文件的菜单:

总结

  1. 关于右键菜单还有很多技巧,我只是把我知道的,我常用的列出来,做个记录。更多技巧可以百度或者谷歌吧。
  2. 希望本文可以帮到大家,反正我已经通过自己的瞎搞,弄了一套舒服的适合我自己的右键菜单,并且制作了reg文件,换个电脑分分钟搞定。
目录注册表定制右键菜单前言注册表参数参数和解释验证参数注册表参数总结右击文件菜单配置多级菜单先添加一级菜单再添加二级菜单还可以添加三级菜单下效果图通过注册表文件创建各种位置的注册表右击桌面空白位置
SwiftUI是一种新颖的构建UI方式和全新的编码风格,本文以通俗易懂的语言,从Swift51语法新特性和SwiftUI的优势方面进行分享,希望对热爱移动端的同学有一定的帮助,让大家尽可能快速、全面和
本文主要介绍如何设计一个高效通用的线程池。详细说明了一个线程池由哪几部分组成,最后通过100行C++代码实现一个高效通用的线程池。1线程池的基础元素std::vector<std::thread
eact基础1react的定义和特点11什么是reactreact是一个用于构建用户界面的JavaScript库用户界面:HTML页面(前端)如果从MVC的角度,react仅仅是视图层(v),也
目录1:进入MIDI的世界2:MIDI的发展历程21:从混乱到统一22:从载波调制到波表合成221:几个著名的硬件波表合成器23:软件合成器诞生至今231:SoundFont3:MIDI文件格式4:现
文章目录一、nginx是什么?1、正向代理2、反向代理3、负载均衡4、动静分离二、nginx安装三、常用命令四、配置文件五、实战配置1、upstream定义上游服务器(后台提供服务的服务器)2、pro
第一章单片机概述单选题知识点1MCU:单片机EMPU:嵌入式微处理器2使用二进制的主要原因是受器件的物理性能限制3手机中的双核是指:EMPUDSP4单片机与普通微型计算机的不同之处是其将CPU、存储器
导读前几天和一个朋友讨论他们公司的系统问题,传统的单体应用,集群部署,他说近期服务的并发量可能会出现瞬时增加的风险,虽然部署集群,但是通过压测后发现请求延迟仍然是很大,想问问我有什么改进的地方。我
一面:先是问问项目,然后开始问一些问题1、每个请求耗时100ms,机器的配置是4核8G,问要达到10000TPS需要多少台机器?没答上来,问问是IO密集型还是CPU密集型,然后面试官说我想得太
现在使用NIO的场景越来越多,很多网上的技术框架或多或少的使用NIO技术,譬如Tomcat,Jetty。学习和掌握NIO技术已经不是一个JAVA攻城狮的加分技能,而是一个必备技能。在前面2篇文章《什么