689 字
3 分钟
给你的电脑增加一个自定义右键菜单
Windows右键菜单
有时候写一些简单的html网页,当必须使用HTTP服务加载的时候,都需要手动启动一下命令,感觉步骤很繁琐 效率也很低,都是一些重复性动作。 需要在当前目录下打开终端,然后执行python -m http.server 8080
所以我就想着直接右键菜单就能在当前目录自动执行这个命令就好了。
目前最简单的方式就是注册表实现右键菜单,所以我就直接写了个注册表注入脚本,并且在启动HTTP服务的时候自动打开浏览器,代码如下:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\Background\shell\HttpServer]
@="启动HTTP服务 (9090)"
"Icon"="imageres.dll,-5302"
"Position"="Top"
[HKEY_CLASSES_ROOT\Directory\Background\shell\HttpServer\command]
@="cmd.exe /s /k pushd \"%V\" && (start /b cmd /c \"timeout /t 1 /nobreak >nul && start http://127.0.0.1:9090\") && python -m http.server 9090"
将代码保存为.reg后缀的注册表导入脚本,例如install.reg,然后双击执行。需要注意的是要以UTF-16 LE编码保存此文件,不然中文会乱码。
右键菜单效果图:

代码解析
- 核心机制:向
HKEY_CLASSES_ROOT\Directory\Background\shell写入键值。 - 作用域:
Directory\Background代表在文件夹空白处点击右键。如果是点在文件夹图标上,则需要写到Directory\shell。 - 命令解析:
pushd "%V": 将 CMD 工作目录切换到当前文件夹(%V是变量)。start http://127.0.0.1:9090:调用默认浏览器打开此地址。python -m http.server 9090: Python自带的启动静态服务器快捷命令,我电脑基本必装Python。
- 优化体验:使用异步执行 优化了一下使用体验。
进阶
此时你会发现这个右键菜单在windows 11系统里需要点击显示更多选项才能看到。
这是因为 Windows 11 重构了右键菜单,传统的注册表方式IContextMenu默认被放入二级菜单。
想要直接显示在一级菜单里,只有实现了IExplorerCommand接口并具有Package Identity (包身份)的应用,才有资格进入一级菜单。
那么想要进入一级菜单,需要做什么?
如果想要在一级菜单直接显示,单纯改注册表已经做不到了,必须升级技术栈,大致三个步骤:
- 语言首选 C++:写一个 DLL,实现 COM 接口
IExplorerCommand。比改注册表要复杂得多,需要处理引用计数、接口查询等底层逻辑。 - 打包 (Sparse Package):必须给程序一个
身份证(AppxManifest.xml)。 - 签名 (Identity):必须要有数字签名才行。自己用的话,可以生成一个自签名证书并信任它。
当然我这种简单的小众需求还是使用注册表方式最合适,要是写一个DLL就有点小题大做了。
