Python 注册菜单
我们看到下面的示例图是 在右键文件夹上查看菜单,带有两级的菜单选项。
文件夹

空白处

需要使用管理员权限运行
因为右键菜单需要注册表信息,打开注册表需要管理员权限UAC,所以在执行命令过程中需要使用管理员权限来执行命令
import sys
import winreg as reg
import os
def add_context_menu_parent(parent_name, reg_root_key_path, reg_key_path):
# 打开名称父键
key = reg.OpenKey(reg_root_key_path, reg_key_path)
# 为key创建一个名称为menu_name的sub_key,并设置sub_key的值为menu_name加上快捷键,数据类型为REG_SZ字符串类型
reg.SetValue(key, parent_name, reg.REG_SZ, "")
# 打开刚刚创建的名为menu_name的sub_key
sub_key = reg.OpenKey(key, parent_name, 0, reg.KEY_ALL_ACCESS)
# 为sub_key设置成可添加二级菜单
# reg.SetValueEx(sub_key, "MUIVerb", 0, reg.REG_SZ,parent_name + "(&{0})".format(shortcut_key))
# reg.SetValueEx(sub_key, "icon", 0, reg.REG_SZ, icon_path)
# reg.SetValueEx(sub_key, "MultipleInvokePromptMinimum", 0, reg.REG_DWORD, 1)
reg.SetValueEx(sub_key, "SubCommands", 0, reg.REG_SZ, "")
reg.SetValue(sub_key, "shell", reg.REG_SZ, "")
# 关闭sub_key和key
reg.CloseKey(sub_key)
reg.CloseKey(key)
def add_context_menu(menu_name, command, reg_root_key_path, reg_key_path, shortcut_key):
# 打开名称父键
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, f"{menu_name}(&{shortcut_key})")
# 打开刚刚创建的名为menu_name的sub_key
sub_key = reg.OpenKey(key, menu_name, 0, reg.KEY_ALL_ACCESS)
# reg.SetValueEx(sub_key, "icon", 0, reg.REG_SZ, icon_path)
# 为sub_key添加名为"command"的子键,并设置其值为command + " "%v"",数据类型为REG_SZ字符串类型
reg.SetValue(sub_key, "command", reg.REG_SZ, command)
# 关闭sub_key和key
reg.CloseKey(sub_key)
reg.CloseKey(key)
if __name__ == "__main__":
parent_name = "服务"
add_context_menu_parent(parent_name, reg.HKEY_CLASSES_ROOT, r"Directoryshell")
add_context_menu_parent(parent_name, reg.HKEY_CLASSES_ROOT, r"DirectoryBackgroundshell")
menu_name0 = "添加"
# 执行一个python脚本的命令,用于打印命令行参数的第二个参数(即选中的文件路径)
py_command0 = rf"addwm"
# 添加文件右键菜单
add_context_menu(menu_name0, py_command0, reg.HKEY_CLASSES_ROOT, rf"Directoryshell{parent_name}shell", "A")
add_context_menu(menu_name0, py_command0, reg.HKEY_CLASSES_ROOT, rf"DirectoryBackgroundshell{parent_name}shell", "A")
menu_name0 = "删除"
# 执行一个python脚本的命令,用于打印命令行参数的第二个参数(即选中的文件路径)
py_command0 = rf"removewm"
# 添加文件右键菜单
add_context_menu(menu_name0, py_command0, reg.HKEY_CLASSES_ROOT, rf"Directoryshell{parent_name}shell", "R")
add_context_menu(menu_name0, py_command0, reg.HKEY_CLASSES_ROOT, rf"DirectoryBackgroundshell{parent_name}shell", "R")
os.system("pause")


