使用Python+winreg修改/重命名Windows注册表的键

一、修改/重命名Windows注册表的键的步骤

1. 使用新的键名创建新的键

2. 获取旧键中的所有数据(包括键的默认值、键中所有的值、键中的子健等)

3. 将旧键中的所有数据复制到新键中

4. 删除旧键

二、使用Python+winreg修改/重命名Windows注册表的键

python 复制代码
import winreg


def rename_key(old_key_path, new_key_name):
    """
    修改注册表的key名称
    :param old_key_path: 旧key路径
    :param new_key_name: 新key名称
    :return:
    """

    # 打开旧key
    old_key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, old_key_path)

    # 获取旧key的信息
    key_info = winreg.QueryInfoKey(old_key)

    # 获取旧key的所有值和类型
    values = {}
    for i in range(key_info[1]):

        value_name, value_data, value_type = winreg.EnumValue(old_key, i)

        values[value_name] = (value_data, value_type)

    # 创建新key
    new_key_path = old_key_path.rsplit('\\', 1)[0] + '\\' + new_key_name

    new_key = winreg.CreateKey(winreg.HKEY_CURRENT_USER, new_key_path)

    # 复制旧key的所有键值到新key
    try:
        for i in range(1024):

            name, value, type_ = winreg.EnumValue(old_key, i)

            winreg.SetValueEx(new_key, name, 0, type_, value)

    except WindowsError as e:
        pass

    # 将旧key中所有子项复制到新key中
    for i in range(key_info[0]):

        sub_key_name = winreg.EnumKey(old_key, i)
        sub_key_path = old_key_path + '\\' + sub_key_name
        sub_key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, sub_key_path)
        sub_key_info = winreg.QueryInfoKey(sub_key)
        sub_new_key_path = new_key_path + '\\' + sub_key_name
        sub_new_key = winreg.CreateKey(winreg.HKEY_CURRENT_USER, sub_new_key_path)

        # 将子项中所有值复制到新子项中
        for j in range(sub_key_info[1]):

            value_name, value_data, value_type = winreg.EnumValue(sub_key, j)

            winreg.SetValueEx(sub_new_key, value_name, 0, value_type, value_data)

        # 关闭子项句柄
        sub_new_key.Close()
        sub_key.Close()

    # 关闭旧key句柄
    old_key.Close()

    # 删除旧key
    winreg.DeleteKey(winreg.HKEY_CURRENT_USER, old_key_path)

def test_rename_key():

    # 创建一个测试key
    test_key_path = r'Software\test_key'

    test_key = winreg.CreateKey(winreg.HKEY_CURRENT_USER, test_key_path)

    winreg.SetValueEx(test_key, 'test_value', 0, winreg.REG_SZ, 'test_data')

    # 测试rename_key函数
    rename_key(test_key_path, 'new_test_key')

    # 检查新key是否存在
    try:
        new_test_key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r'Software\new_test_key')

        new_test_value = winreg.QueryValueEx(new_test_key, 'test_value')[0]

        assert new_test_value == 'test_data'
        print('测试通过')

    except Exception as e:
        print('测试失败:', e)

    # 删除测试key
    winreg.DeleteKey(winreg.HKEY_CURRENT_USER, r'Software\new_test_key')

test_rename_key()
相关推荐
花酒锄作田6 小时前
FastAPI 使用 session 认证
python·fastapi
lsswear6 小时前
Python 并发 线程
开发语言·python
郑州光合科技余经理6 小时前
国际版外卖系统:税率字段怎么和订单主流程解耦
android·java·开发语言·前端·后端·php·ai编程
软件课代表CiCi6 小时前
运行库是什么?电脑缺运行库怎么办?c++运行库缺失修复全攻略
开发语言·c++·windows·电脑·dll修复·dll丢失·运行库
Ivanqhz7 小时前
MLIR OpBuilder
开发语言·python·mlir
梅孔立7 小时前
OpenCode + Windows PowerShell 完整安装使用教程
windows
2601_962364977 小时前
面向设备厂商:Windows Hello 认证摄像头核心要点
windows·安全·电脑
红宝村村长8 小时前
windows笔记本双系统ubuntu设置
开发语言
威联通安全存储8 小时前
TS-h2287XU-RP 在家电制造总装与质检数据场景的部署
python·制造
泡泡鱼(敲代码中)9 小时前
Python 字符串 str 完整学习笔记
python·学习