当前位置: 首页 > article >正文

Python winreg将cmd/PowerShell(管理员)添加到右键菜单

效果

在这里插入图片描述
在这里插入图片描述

1. 脚本

用管理员权限运行,重复执行会起到覆盖效果(根据sub_key)。

  • icon自己设置。
  • text可以自定义。
  • sub_key可以改但不推荐(避免改成和系统已有项冲突的)。
  • command不要改。
from winreg import *


registry = r"Directory\Background\Shell"

# Warning: 不要将sub_key改为cmd或PowerShell,否则可能会与系统已有项冲突。
config = [
    {
        "sub_key": "mouse_cmd",
        "text": "Windows Command",
        "icon": r"C:\Users\CF\Desktop\icon\cmd.ico",
        "command": "cmd",
    },
    {
        "sub_key": "mouse_cmd_admin",
        "text": "Windows Command (管理员)",
        "icon": r"C:\Users\CF\Desktop\icon\cmd.ico",
        "command": "PowerShell -windowstyle Hidden -Command \"Start-Process cmd.exe -ArgumentList '/s,/k, pushd,%V' -Verb RunAs\"",
    },
    {
        "sub_key": "mouse_PowerShell",
        "text": "Windows PowerShell",
        "icon": r"C:\Users\CF\Desktop\icon\powershell.ico",
        "command": "PowerShell",
    },
    {
        "sub_key": "mouse_PowerShell_admin",
        "text": "Windows PowerShell (管理员)",
        "icon": r"C:\Users\CF\Desktop\icon\powershell.ico",
        "command": 'powershell -WindowStyle Hidden -NoProfile -Command "Start-Process -Verb RunAs powershell.exe -ArgumentList \\"-NoExit -Command Push-Location \\\\\\"\\"%V/\\\\\\"\\"\\"',
    },
]


for item in config:
    key = OpenKey(HKEY_CLASSES_ROOT, registry)
    SetValue(key, item["sub_key"], REG_SZ, item["text"])  # 创建子键,并设置其默认项的值(提示文字)

    key = OpenKey(
        HKEY_CLASSES_ROOT, registry + "\\" + item["sub_key"], access=KEY_WRITE
    )  # 打开子键

    SetValueEx(key, "icon", None, REG_SZ, item["icon"])  # 在子键中设置Icon项的值

    SetValue(
        key, "command", REG_SZ, item["command"]
    )  # 在子键中创健子键command,设置其默认项的值(command)

print("successfully")

2. 一次设置的过程

想了解过程的可以看下下面的。

# function: add cmd.exe to right-click context menu

g_text = "命令提示符"  # 显示文字
g_icon = r"C:\Users\CF\Pictures\Saved Pictures\cmd.ico"  # 图标路径
g_exe = r"C:\Windows\system32\cmd.exe"  # 可执行文件路径
g_key = r"right-click_cmd"  # 自定义,注册表字段名,不要和已有的冲突

import winreg

key = winreg.OpenKey(winreg.HKEY_CLASSES_ROOT, r"Directory\Background\Shell")

winreg.SetValue(key, g_key, winreg.REG_SZ, g_text)


key = winreg.OpenKeyEx(
    winreg.HKEY_CLASSES_ROOT,
    r"Directory\Background\Shell\\" + g_key,
    access=winreg.KEY_WRITE,
)
winreg.SetValueEx(key, "Icon", None, winreg.REG_SZ, g_icon)
winreg.SetValue(key, "command", winreg.REG_SZ, g_exe)


# 在用管理员权限时,方法是唤起一个PowerShell,然后Start-Process来发起一个管理员权限的进程;
#   -verb Runas意思是管理员
#   /s /k pushd %V大概是传递给cmd路径参数

# 示例:
# PowerShell -windowstyle hidden -Command "Start-Process cmd.exe -ArgumentList '/s,/k, pushd,%V' -Verb RunAs"

http://www.kler.cn/a/133088.html

相关文章:

  • C++初阶——日期类的实现
  • SpringMVC数据校验、数据格式化处理、国际化设置
  • 【eNSP】企业网络架构实验——vlan间的路由通信(三)
  • 计算机网络HTTP——针对实习面试
  • Python习题 251:修改文件名称
  • 【3D Slicer】的小白入门使用指南四
  • OpenCV快速入门:图像滤波与边缘检测
  • Linux shell编程学习笔记27:tputs
  • 【ROS导航Navigation】五 | 导航相关的消息 | 地图 | 里程计 | 坐标变换 | 定位 | 目标点和路径规划 | 激光雷达 | 相机
  • jQuery UI简单的讲解
  • pandas定位选取某列某指标最大值所在的行记录,比如月底
  • Java20新增特性
  • AIGC 是通向 AGI 的那条路吗?
  • 复杂数据统计与R语言程序设计实验二
  • 计算机网络学习笔记(六):应用层(待更新)
  • Linux发展历程
  • 基于STM32的外部中断(EXTI)在嵌入式系统中的应用
  • 2023.11.18 -自用hadoop高可用环境搭建命令
  • 【SQL】简单博客开发代码
  • 客户端性能优化实践
  • 特征缩放和转换以及自定义Transformers(Machine Learning 研习之九)
  • 飞书开发学习笔记(八)-开发飞书小程序Demo
  • 牛客 —— 链表中倒数第k个结点(C语言,快慢指针,配图)
  • Linux网络——HTTP
  • Swift 如何打造兼容新老系统的字符串分割(split)方法
  • <C++>类和对象下|初始化列表|explicit static|友元|内部类|匿名对象|构造函数的优化