Python编程实现REG_DWORD键值的批量读取和修改
发布时间:2023-12-31 15:40:48
在Python中,可以使用winreg模块来实现对Windows注册表中REG_DWORD键值的批量读取和修改。下面是一个使用例子,共包含了四个功能:读取键值、修改键值、批量读取键值和批量修改键值。
首先,需要导入winreg模块:
import winreg
然后,通过winreg.ConnectRegistry函数连接到注册表,并选择要操作的注册表项:
reg = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER) key_path = r"Software\Microsoft\Windows\CurrentVersion" key = winreg.OpenKey(reg, key_path, 0, winreg.KEY_ALL_ACCESS)
接下来,可以实现具体的功能。
1. 读取键值
def read_dword_value(key, value_name):
try:
value, _ = winreg.QueryValueEx(key, value_name)
print("键值{}的值为:{}".format(value_name, value))
except FileNotFoundError:
print("键值{}不存在".format(value_name))
使用winreg.QueryValueEx函数来读取指定键值的值。value是键值的值,_是键值的类型(我们只关心值,类型可忽略)。
2. 修改键值
def modify_dword_value(key, value_name, new_value):
try:
winreg.SetValueEx(key, value_name, 0, winreg.REG_DWORD, new_value)
print("键值{}已修改为{}".format(value_name, new_value))
except Exception as e:
print("修改键值{}失败: {}".format(value_name, str(e)))
使用winreg.SetValueEx函数来修改指定键值的值。new_value是要修改的新值。
3. 批量读取键值
def read_dword_values(key):
num_values = winreg.QueryInfoKey(key)[1]
print("共有{}个键值".format(num_values))
for i in range(num_values):
value_name, value, _ = winreg.EnumValue(key, i)
if _ == winreg.REG_DWORD:
print("键值{}的值为:{}".format(value_name, value))
使用winreg.QueryInfoKey函数获取键值的个数,然后使用winreg.EnumValue函数遍历每个键值。value_name是键值的名称,value是键值的值,_是键值的类型。通过判断类型为winreg.REG_DWORD,筛选出REG_DWORD类型的键值进行打印。
4. 批量修改键值
def modify_dword_values(key, new_value):
num_values = winreg.QueryInfoKey(key)[1]
print("共有{}个键值".format(num_values))
for i in range(num_values):
value_name, _, _ = winreg.EnumValue(key, i)
try:
winreg.SetValueEx(key, value_name, 0, winreg.REG_DWORD, new_value)
print("键值{}已修改为{}".format(value_name, new_value))
except Exception as e:
print("修改键值{}失败: {}".format(value_name, str(e)))
同样使用winreg.QueryInfoKey函数获取键值的个数,然后使用winreg.EnumValue函数遍历每个键值。通过winreg.SetValueEx函数修改键值的值。
最后,记得关闭注册表:
winreg.CloseKey(key) winreg.CloseKey(reg)
完整的代码如下:
import winreg
def read_dword_value(key, value_name):
try:
value, _ = winreg.QueryValueEx(key, value_name)
print("键值{}的值为:{}".format(value_name, value))
except FileNotFoundError:
print("键值{}不存在".format(value_name))
def modify_dword_value(key, value_name, new_value):
try:
winreg.SetValueEx(key, value_name, 0, winreg.REG_DWORD, new_value)
print("键值{}已修改为{}".format(value_name, new_value))
except Exception as e:
print("修改键值{}失败: {}".format(value_name, str(e)))
def read_dword_values(key):
num_values = winreg.QueryInfoKey(key)[1]
print("共有{}个键值".format(num_values))
for i in range(num_values):
value_name, value, _ = winreg.EnumValue(key, i)
if _ == winreg.REG_DWORD:
print("键值{}的值为:{}".format(value_name, value))
def modify_dword_values(key, new_value):
num_values = winreg.QueryInfoKey(key)[1]
print("共有{}个键值".format(num_values))
for i in range(num_values):
value_name, _, _ = winreg.EnumValue(key, i)
try:
winreg.SetValueEx(key, value_name, 0, winreg.REG_DWORD, new_value)
print("键值{}已修改为{}".format(value_name, new_value))
except Exception as e:
print("修改键值{}失败: {}".format(value_name, str(e)))
# 连接到注册表
reg = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER)
key_path = r"Software\Microsoft\Windows\CurrentVersion"
# 打开注册表项
key = winreg.OpenKey(reg, key_path, 0, winreg.KEY_ALL_ACCESS)
# 功能1:读取键值
read_dword_value(key, "键值名称")
# 功能2:修改键值
modify_dword_value(key, "键值名称", 100)
# 功能3:批量读取键值
read_dword_values(key)
# 功能4:批量修改键值
modify_dword_values(key, 200)
# 关闭注册表和注册表项
winreg.CloseKey(key)
winreg.CloseKey(reg)
注意:在实际使用时,请谨慎操作注册表,避免对系统造成不可逆的损坏。
