引言
在Windows操作系统中,注册表是一个重要的数据库,它用于存储系统和应用程序的设置和配置信息。为了操作注册表,Python提供了winreg模块。winreg模块允许我们以编程的方式读取、写入和修改注册表键值。
安装
winreg模块是Python标准库的一部分,因此无需单独安装。
将winreg模块导入到Python脚本中:
import winreg
打开注册表键
在winreg模块中,使用OpenKey函数来打开注册表键。
该函数接受两个参数:hkey和sub_key。hkey是一个表示根键的常量,而sub_key是一个字符串,表示要打开的键的路径。
以下是几个常用的根键常量:
HKEY_CURRENT_USER:当前用户的注册表键
HKEY_LOCAL_MACHINE:本地机器的注册表键
HKEY_CLASSES_ROOT:类信息的注册表键
HKEY_USERS:用户配置信息的注册表键
HKEY_CURRENT_CONFIG:当前配置信息的注册表键
以下代码演示如何打开一个HKEY_CURRENT_USER常量注册表:
# 打开HKEY_CURRENT_USER\Software键
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, "Software")
如打开多级目录方式如下,以打开7-zip注册表为例:
import winreg
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"SOFTWARE\7-Zip")
读取注册表键值
打开了注册表键后,可以使用QueryValueEx函数来读取键值。
该函数接受两个参数:key和value_name。
key是一个表示打开的键的句柄,而value_name是一个字符串,表示要读取的键值的名称。
以下代码演示了如何读取一个注册表键值:
# 读取HKEY_CURRENT_USER\Software\Microsoft\Windows键下的ProductId键值
value = winreg.QueryValueEx(key, "ProductId")
print(value[0])
以查看7-zip注册表Path键值为例:
import winreg
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"SOFTWARE\7-Zip")
value = winreg.QueryValueEx(key, "Path")
print(value[0])
运行结果如下:
写入注册表键值
要写入一个注册表键值,我们可以使用SetValueEx函数。该函数接受三个参数:key、value_name和type。
key是一个表示打开的键的句柄,value_name是一个字符串,表示要写入的键值的名称,而type是一个整数,表示键值的类型。
以下代码演示了如何写入一个注册表键值:
# 写入HKEY_CURRENT_USER\Software\MyApp键下的Version键值
winreg.SetValueEx(key, "Version", 0, winreg.REG_SZ, "1.0")
注册表写入出现权限报错
在写入注册表时出现了如下权限报错,需要注意打开注册表需要赋予完全访问权限,才可以写入:
Traceback (most recent call last):
File "C:\Users\unic0rn\Desktop\1.py", line 10, in <module>
winreg.SetValueEx(key, reg_value, 0, winreg.REG_SZ, reg_data)
PermissionError: [WinError 5] 拒绝访问。
winreg.OpenKey
是winreg
模块中的一个函数,用于打开指定的注册表项并返回一个句柄。函数的语法如下:
winreg.OpenKey(key, sub_key, res, sam)
参数说明:
key
:指定要打开的注册表根键(如winreg.HKEY_CURRENT_USER
、winreg.HKEY_LOCAL_MACHINE
等)。sub_key
:指定要打开的注册表项的路径。res
:保留参数,传入0即可。sam
:指定打开注册表项的访问权限,可以使用winreg.KEY_READ
(只读权限)、winreg.KEY_WRITE
(写权限)等常量。
修改后代码如下,可以正常添加代码。
以修改启动项代码为例:
import winreg
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", 0, winreg.KEY_ALL_ACCESS)
reg_value = "reg_value"
reg_data = "reg_data"
winreg.SetValueEx(key, reg_value, 0, winreg.REG_SZ, reg_data)
运行结果如下:

关闭注册表键
完成对注册表的操作后,应关闭注册表键以释放资源。
可以使用CloseKey函数来关闭注册表键。
该函数接受一个参数:key,表示要关闭的注册表键的句柄。
以下是如何关闭注册表键的示例代码:
# 关闭注册表键
winreg.CloseKey(key)
以上就是python操作注册表的一些常见用法。