使用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()
相关推荐
Tbisnic7 分钟前
26.AI大模型:RNN、LSTM、GRU
人工智能·python·rnn·gru·大模型·llm·lstm
七夜zippoe30 分钟前
OpenClaw 实战:智能文档助手——从问答到生成的完整方案
人工智能·python·机器学习·openclaw·智能文档
卡提西亚1 小时前
leetcode-179. 最大数
python·算法
ECT-OS-JiuHuaShan1 小时前
严格证明:还原论是ASCII,整体论是UTF-8的历史意义和价值
开发语言·人工智能·算法·量子计算
AC赳赳老秦1 小时前
时间开销自动统计:OpenClaw 记录工作任务时长、分析时间分配、给出优化建议
java·大数据·开发语言·python·自动化·deepseek·openclaw
清水白石0082 小时前
Python 类定义阶段自动注册子类:从 `__init_subclass__` 到插件系统实战
linux·前端·python
用户8356290780512 小时前
如何使用 Python 为 PDF 添加和管理图层
后端·python
祉猷并茂,雯华若锦2 小时前
Appium 3.x 实战:元素定位与常见错误解析
开发语言·python·appium
西西学代码2 小时前
Flutter---StreamBuilder案例
javascript·windows·flutter
Lethehong2 小时前
飞算Java:从需求梳理到风险闭环,搭建云盾企业信息安全与权限管理平台
java·开发语言