首先我们需要安装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 winregdef read_registry_subkeys(hive, subkey):try:# 打开注册表项key = winreg.OpenKey(hive, subkey, 0, winreg.KEY_READ | winreg.KEY_WOW64_64KEY)# 枚举子项subkeys = []index = 0while True:try:subkey_name = winreg.EnumKey(key, index)subkeys.append(subkey_name)index += 1except OSError:break# 关闭注册表项winreg.CloseKey(key)return subkeysexcept 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 = 0while True:try:value_name, value_data, value_type = winreg.EnumValue(key, index)values[value_name] = (value_data, value_type)index += 1except OSError:break# 关闭注册表项winreg.CloseKey(key)return valuesexcept 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"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"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 winregdef 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"SOFTWARE\CET"
name = "PecCore " #ExampleValue
value = "NewValue"
value_type = winreg.REG_SZset_registry_value(hive, subkey, name, value, value_type)
创建注册表项以及键值对
import winregdef 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"Software\CET\PecCore" # 替换为你的注册表路径
# 设置或修改键值
value_name = "Version"
value_data = "1.0"
Edit_Reg(key_path,value_name,value_data)
删除键值对
import winregdef 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"SOFTWARE\CET\PecStar_4.0"
name = "Version"
删除目录
import winregdef 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"SOFTWARE\CET\PecStar_4.0"
delete_registry_value(hive, subkey)