我們看到下麵的示例圖是 在右鍵文件夾上查看菜單,帶有兩級的菜單選項。 文件夾 空白處 需要使用管理員許可權運行 因為右鍵菜單需要註冊表信息,打開註冊表需要管理員許可權UAC,所以在執行命令過程中需要使用管理員許可權來執行命令 import sys import winreg as reg import o ...
我們看到下麵的示例圖是 在右鍵文件夾上查看菜單,帶有兩級的菜單選項。
文件夾
空白處
需要使用管理員許可權運行
因為右鍵菜單需要註冊表信息,打開註冊表需要管理員許可權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'Directory\shell')
add_context_menu_parent(parent_name, reg.HKEY_CLASSES_ROOT, r'Directory\Background\shell')
menu_name0 = '添加'
# 執行一個python腳本的命令,用於列印命令行參數的第二個參數(即選中的文件路徑)
py_command0 = rf'addwm'
# 添加文件右鍵菜單
add_context_menu(menu_name0, py_command0, reg.HKEY_CLASSES_ROOT, rf'Directory\shell\{parent_name}\shell', 'A')
add_context_menu(menu_name0, py_command0, reg.HKEY_CLASSES_ROOT, rf'Directory\Background\shell\{parent_name}\shell', 'A')
menu_name0 = '刪除'
# 執行一個python腳本的命令,用於列印命令行參數的第二個參數(即選中的文件路徑)
py_command0 = rf'removewm'
# 添加文件右鍵菜單
add_context_menu(menu_name0, py_command0, reg.HKEY_CLASSES_ROOT, rf'Directory\shell\{parent_name}\shell', 'R')
add_context_menu(menu_name0, py_command0, reg.HKEY_CLASSES_ROOT, rf'Directory\Background\shell\{parent_name}\shell', 'R')
os.system('pause')