在注册表中,值可以是数值、字符串等多种类型。
633408563F99655118DF01601A58DCBF.jpg
5B57160632E07C2DC9332AC0D4F58D10.jpg
对于注册表编程,可以使用 win32api 模块和 win32con 模块,win32api 模块封装了 Windows API 函数,常用的注册表操作有:
(1)RegOpenKye()/RegOpenKeyEx() 打开注册表
(2)RegCloseKey() 关闭注册表
(3)RegQueryValue()/RegQueryValueEx() 设置项值
(4)RegSetValue()/RegSetValueEx() 添加项值
(5)RegCreateKey()/RegCreateKeyEx() 添加项
(6)RegDeleteKey() 删除项
(7)RegDeleteKey() 枚举子键
(8)RegDeletetValue() 删除值
下面的代码查询 IE 浏览器版本信息。
>>> import win32api
>>> import win32con
>>> key = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE, 'SOFTWARE\\Microsoft\\Internet Explorer', 0, win32con.KEY_ALL_ACCESS)
>>> win32api.RegQueryValue(key, '')
''
>>> win32api.RegQueryValueEx(key, 'Version')
('9.11.18362.0', 1)
>>> win32api.RegQueryInfoKey(key)
(32, 9, 132870495522230263)
>>> win32api.RegCloseKey(key)
检查随系统启动而启动的程序列表。
from win32api import *
from win32con import *
def GetValues(fullname):
name = str.split(fullname, '\\', 1)
try:
if name[0] == 'HKEY_LOCAL_MACHINE':
key = RegOpenKey(HKEY_LOCAL_MACHINE, name[1], 0, KEY_READ)
elif name[0] == 'HKEY_CURRENT_USER':
key = RegOpenKey(HKEY_CURRENT_USER, name[1], 0, KEY_READ)
elif name[0] == 'HKEY_CURRENT_ROOT':
key = RegOpenKey(HKEY_CURRENT_ROOT, name[1], 0, KEY_READ)
elif name[0] == 'HKEY_CURRENT_CONFIG':
key = RegOpenKey(HKEY_CURRENT_CONFIG, name[1], 0, KEY_READ)
elif name[0] == 'HKEY_USER':
key = RegOpenKey(HKEY_USER, name[1], 0, KEY_READ)
else:
print('Error, no key names:', name[0])
info = RegQueryInfoKey(key)
for i in range(0, info[1]):
ValueName = RegEnumValue(key, i)
print(str.ljust(ValueName[0], 20), ValueName[1])
RegCloseKey(key)
except BaseException as e:
print('Sth is wrong')
print(e)
if __name__ == '__main__':
KeyNames = ['HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run',
'HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce',
'HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnceEx',
'HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run',
'HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce']
for KeyName in KeyNames:
print(KeyName)
GetValues(KeyName)
操作 Windows 注册表的另外一种是使用 winreg 模块。下面的代码演示了使用 winreg 枚举注册表值的用法。
import winreg
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r'Software\Microsoft\Windows\CurrentVersion\Explorer')
try:
i = 0
while 1:
Name, Value, Type = winreg.EnumValue(key, i)
print(repr(Name), ':', repr(Value), ':', Type)
i += 1
except WindowsError:
pass
print('='*20)
Name = "link"
Value, Type = winreg.QueryValueEx(key, Name)
print(Name, Value)