注册表编辑器添加右键菜单的基本原理
注册表添加以下键值,就能右键运行命令
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" 程序操作的路径