首先我们需要安装winreg

pip install winreg

注册表常量

winreg“总有很多有用的方法基本上就是操作注册表中的键值我们挑几个重要的来说说。首先我们来了解下”winreg“中的各个常量

1.HKEY_ 常量
winreg.HKEY_CLASSES_ROOT     #存储应用shell信息
winreg.HKEY_CURRENT_USER     #当前用户自定义的信息
winreg.HKEY_LOCAL_MACHINE    #计算机系统所有的信息
winreg.HKEY_USERS            #所有用户信息
winreg.HKEY_PERFORMANCE_DATA #性能数据
winreg.HKEY_CURRENT_CONFIG   #本地计算机系统硬件配置文件
winreg.HKEY_DYN_DATA         #windows98后的版本无法使用
2.访问权限
winreg.KEY_ALL_ACCESS           #所有权
winreg.KEY_WRITE                #可写
winreg.KEY_READ                 #可读
winreg.KEY_EXECUTE              #可执行相当于KEY_READ
winreg.KEY_QUERY_VALUE          #查询注册表键值
winreg.KEY_SET_VALUE            #创建删除设置一组注册表
winreg.KEY_CREATE_SUB_KEY       #创建一个注册表子项的注册表
winreg.KEY_ENUMERATE_SUB_KEYS   #枚举注册表子项所需的注册表
winreg.KEY_NOTIFY               #修改注册表键时的提示
winreg.KEY_CREATE_LINK          #创建一个链接,预留给系统
3.64位的具体应用
winreg.KEY_WOW64_64KEY  #在64位Windows应用程序应该运行在64位注册表视图
winreg.KEY_WOW64_32KEY  #在64位Windows应用程序应该运行在32位注册表视图
4.类型
winreg.REG_BINARY                  #任何形式的二进制数据
winreg.REG_DWORD                   #32位的数
winreg.REG_DWORD_LITTLE_ENDIAN     #32位的数字在低位优先格式,相当于REG_DWORD
winreg.REG_DWORD_BIG_ENDIAN        #32位的数字在高位优先格式
winreg.REG_EXPAND_SZ               #以null结尾的字符串包含环境变量引用(% %)
winreg.REG_LINK                    #Unicode符号链接
winreg.REG_MULTI_SZ                #一个以null结尾的字符串序列,由两个空字符结束
winreg.REG_NONE                    #没有定义的值类型
winreg.REG_QWORD                   #64位的数
winreg.REG_QWORD_LITTLE_ENDIAN         #在低位优先一个64位的数字格式,相当于REG_QWORD
winreg.REG_RESOURCE_LIST               #设备驱动资源列表
winreg.REG_FULL_RESOURCE_DESCRIPTOR    #硬件设置
winreg.REG_RESOURCE_REQUIREMENTS_LIST  #硬件资源列表
winreg.REG_SZ                          #一个以null结尾的字符串

使用Python读取注册表一个目录下的所有键值

import winreg

def read_registry_subkeys(hive, subkey):
    try:
        # 打开注册表项
        key = winreg.OpenKey(hive, subkey, 0, winreg.KEY_READ | winreg.KEY_WOW64_64KEY)

        # 枚举子项
        subkeys = []
        index = 0
        while True:
            try:
                subkey_name = winreg.EnumKey(key, index)
                subkeys.append(subkey_name)
                index += 1
            except OSError:
                break

        # 关闭注册表项
        winreg.CloseKey(key)

        return subkeys
    except FileNotFoundError:
        print(f"Registry key not found: {subkey}")
    except Exception as e:
        print(f"Error reading registry subkeys: {e}")

def read_registry_values(hive, subkey):
    try:
        # 打开注册表项
        key = winreg.OpenKey(hive, subkey, 0, winreg.KEY_READ | winreg.KEY_WOW64_64KEY)

        # 枚举键值
        values = {}
        index = 0
        while True:
            try:
                value_name, value_data, value_type = winreg.EnumValue(key, index)
                values[value_name] = (value_data, value_type)
                index += 1
            except OSError:
                break

        # 关闭注册表项
        winreg.CloseKey(key)

        return values
    except FileNotFoundError:
        print(f"Registry key not found: {subkey}")
    except Exception as e:
        print(f"Error reading registry values: {e}")

# 示例
hive = winreg.HKEY_LOCAL_MACHINE
subkey = r"SOFTWAREMicrosoftWindowsCurrentVersionUninstall"

subkeys = read_registry_subkeys(hive, subkey)
print(f"Subkeys under {subkey}: {subkeys}")

for subkey_name in subkeys:
    full_subkey = f"{subkey}\{subkey_name}"
    values = read_registry_values(hive, full_subkey)
    print(f"Values under {full_subkey}: {values}")

设置已存在注册表项的键值

import winreg

def set_registry_value(hive, subkey, name, value, value_type):
    try:
        # 打开注册表项
        key = winreg.OpenKey(hive, subkey, 0, winreg.KEY_SET_VALUE | winreg.KEY_WOW64_64KEY)

        # 设置键值
        winreg.SetValueEx(key, name, 0, value_type, value)

        # 关闭注册表项
        winreg.CloseKey(key)
        print(f"Registry value {name} set successfully.")
    except FileNotFoundError:
        print(f"Registry key not found: {subkey}")
    except Exception as e:
        print(f"Error setting registry value: {e}")

# # 示例
hive = winreg.HKEY_LOCAL_MACHINE
subkey = r"SOFTWARECET"
name = "PecCore " #ExampleValue
value = "NewValue"
value_type = winreg.REG_SZ

set_registry_value(hive, subkey, name, value, value_type)

创建注册表项以及键值

import winreg

def Edit_Reg(key_path,value_name,value_data):
    # 创建打开注册表项
    key = winreg.CreateKey(winreg.HKEY_LOCAL_MACHINE, key_path)
    winreg.SetValueEx(key, value_name, 0, winreg.REG_SZ, value_data)
    # 关闭注册表项
    winreg.CloseKey(key)


key_path = r"SoftwareCETPecCore"  # 替换为你的注册表路径
# 设置修改键值
value_name = "Version"
value_data = "1.0"
Edit_Reg(key_path,value_name,value_data)

删除键值

import winreg

def delete_registry_value(hive, subkey, name):
    try:
        # 打开注册表项
        key = winreg.CreateKey(hive, subkey, 0, winreg.KEY_SET_VALUE | winreg.KEY_WOW64_64KEY)

        # 检查值是否存在
        try:
            winreg.QueryValueEx(key, name)
        except FileNotFoundError:
            print(f"Registry value {name} not found.")
            return

        # 删除键值对
        winreg.DeleteValue(key, name)

        # 关闭注册表项
        winreg.CloseKey(key)
        print(f"Registry value {name} deleted successfully.")
    except FileNotFoundError:
        print(f"Registry key not found: {subkey}")
    except Exception as e:
        print(f"Error deleting registry value: {e}")

# 示例
hive = winreg.HKEY_LOCAL_MACHINE
subkey = r"SOFTWARECETPecStar_4.0"
name = "Version"

删除目录

import winreg

def delete_registry_value(hive, subkey):
    try:
        # 打开注册表项
        key = winreg.OpenKey(hive, subkey, 0, winreg.KEY_SET_VALUE | winreg.KEY_WOW64_64KEY)
        # 删除注册表项
        winreg.DeleteKey(hive, subkey)
        # 关闭注册表项
        winreg.CloseKey(key)
        print(f"Registry value deleted successfully.")
    except FileNotFoundError:
        print(f"Registry key not found: {subkey}")
    except Exception as e:
        print(f"Error deleting registry value: {e}")

# 示例
hive = winreg.HKEY_LOCAL_MACHINE
subkey = r"SOFTWARECETPecStar_4.0"
delete_registry_value(hive, subkey)

原文地址:https://blog.csdn.net/qq_43496409/article/details/134666953

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_5539.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注