
注册表编辑器添加右键菜单的基本原理

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\图片转Webp]
@="图片转Webp(&W)"
"icon"="C:\\soft\\amd.ico"
[HKEY_CLASSES_ROOT\*\shell\图片转Webp\command]
@="cmd /c ffmpeg -i %1 %1_new.webp"
使用 FFMPEG
转换图片
ffmpeg -i a.png new.webp
# 因为是命令行程序,所以调用系统Shell `cmd -c`运行
cmd /c ffmpeg -i %1 %1_new.webp
因为工具调用 ffmpeg
还可以视频转webp
,只要小小改动:视频格式转换,视频提取mp3

使用 Python
可以操作 Windows 注册表添加,还可以添加快捷键
- 添加右键菜单的代码,,封装成了
add_context_menu
函数: - 源码:
add_context_menu.py
# coding:utf-8
import winreg as reg
def add_context_menu(menu_name,command,reg_root_key_path,reg_key_path,shortcut_key):
'''
封装的添加一个右键菜单的方法
:param menu_name: 显示的菜单名称
:param command: 菜单执行的命令
:param reg_root_key_path: 注册表根键路径
:param reg_key_path: 要添加到的注册表父键的路径(相对路径)
:param shortcut_key: 菜单快捷键,如:'S'
:return:
'''
# 打开名称父键
key = reg.OpenKey(reg_root_key_path, reg_key_path)
# 为key创建一个名称为menu_name的sub_key,并设置sub_key的值为menu_name加上快捷键,数据类型为REG_SZ字符串类型
reg.SetValue(key, menu_name, reg.REG_SZ, menu_name + '(&{0})'.format(shortcut_key))
# 打开刚刚创建的名为menu_name的sub_key
sub_key = reg.OpenKey(key, menu_name)
# 为sub_key添加名为'command'的子键,并设置其值为command + ' "%v"',数据类型为REG_SZ字符串类型
# reg.SetValue(sub_key, 'command', reg.REG_SZ, command + ' "%v"')
reg.SetValue(sub_key, 'command', reg.REG_SZ, command)
# 关闭sub_key和key
reg.CloseKey(sub_key)
reg.CloseKey(key)
def img2webp_menu():
'''
添加右键菜单,可以在右键点击一个文件、目录、文件夹空白处或驱动器盘符后在命令行中打印出当前的绝对路径
:return: None
'''
# 菜单名称
menu_name = '图片转Webp'
# 执行一个python脚本的命令,用于打印命令行参数的第二个参数(即选中的文件路径)
py_command = r'cmd /c ffmpeg -i %1 %1_new.webp'
# 添加文件右键菜单
add_context_menu(menu_name, py_command,reg.HKEY_CLASSES_ROOT,r'*\\shell','W')
# # 添加文件夹右键菜单
# add_context_menu(menu_name, py_command, reg.HKEY_CLASSES_ROOT, r'Directory\\shell', 'S')
# # 添加文件夹空白处右键菜单
# add_context_menu(menu_name, py_command, reg.HKEY_CLASSES_ROOT, r'Directory\\Background\\shell', 'S')
# # 添加磁盘驱动器右键菜单
# add_context_menu(menu_name, py_command, reg.HKEY_CLASSES_ROOT, r'Drive\\shell', 'S')
if __name__ == '__main__':
img2webp_menu()
代码中添加注册表键的command命令时,是以%v代表一个路径参数的,还有其他几种参数可以使用:
系统默认变量的含义:
%1 表示程序操作的文件
%2 表示系统默认的打印机
%3 表示资料扇区
%4 表示操作的Port端口
"%v" 程序操作的路径