使用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()
相关推荐
Ting-yu1 分钟前
Java中Stream流的使用
java·开发语言·windows
【ql君】qlexcel30 分钟前
Notepad++ 复制宏、编辑宏的方法
开发语言·javascript·notepad++··宏编辑·宏复制
Zevalin爱灰灰39 分钟前
MATLAB GUI界面设计 第六章——常用库中的其它组件
开发语言·ui·matlab
冰糖猕猴桃1 小时前
【Python】进阶 - 数据结构与算法
开发语言·数据结构·python·算法·时间复杂度、空间复杂度·树、二叉树·堆、图
天水幼麟1 小时前
python学习笔记(深度学习)
笔记·python·学习
巴里巴气1 小时前
安装GPU版本的Pytorch
人工智能·pytorch·python
wt_cs1 小时前
银行回单ocr api集成解析-图像文字识别-文字识别技术
开发语言·python
_WndProc2 小时前
【Python】Flask网页
开发语言·python·flask
互联网搬砖老肖2 小时前
Python 中如何使用 Conda 管理版本和创建 Django 项目
python·django·conda
测试者家园2 小时前
基于DeepSeek和crewAI构建测试用例脚本生成器
人工智能·python·测试用例·智能体·智能化测试·crewai