在Python中操作Windows 11注册表,可以使用内置的`winreg`模块(Python标准库的一部分)。以下是完整的注册表操作方法:
—
### **1. 基本注册表操作**
#### **1.1 打开/创建注册表键**
“`python
import winreg
# 打开键 (只读)
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r”Software\Microsoft\Windows”)
# 打开键 (可写)
key = winreg.OpenKey(
winreg.HKEY_CURRENT_USER,
r”Software\Microsoft\Windows”,
0, # reserved
winreg.KEY_WRITE
)
# 创建键 (如果不存在)
try:
key = winreg.CreateKey(winreg.HKEY_CURRENT_USER, r”Software\MyApp”)
except WindowsError as e:
print(f”创建失败: {e}”)
“`
#### **1.2 读取值**
“`python
# 读取默认值
default_value, type = winreg.QueryValueEx(key, “”)
# 读取指定值
try:
value, type = winreg.QueryValueEx(key, “Version”)
print(f”值: {value}, 类型: {type}”)
except FileNotFoundError:
print(“值不存在”)
“`
#### **1.3 写入值**
“`python
# 写入字符串 (REG_SZ)
winreg.SetValueEx(key, “InstallPath”, 0, winreg.REG_SZ, r”C:\Program Files\MyApp”)
# 写入DWORD (REG_DWORD)
winreg.SetValueEx(key, “RunAtStartup”, 0, winreg.REG_DWORD, 1)
# 写入二进制 (REG_BINARY)
winreg.SetValueEx(key, “Secret”, 0, winreg.REG_BINARY, b’\x01\x02\xFF’)
“`
#### **1.4 删除键/值**
“`python
# 删除值
winreg.DeleteValue(key, “OldValue”)
# 删除键 (需先删除所有子键)
winreg.DeleteKey(winreg.HKEY_CURRENT_USER, r”Software\MyApp\Obsolete”)
“`
—
### **2. 枚举键和值**
#### **2.1 枚举子键**
“`python
i = 0
while True:
try:
subkey = winreg.EnumKey(key, i)
print(f”子键 {i}: {subkey}”)
i += 1
except OSError: # 没有更多子键时抛出
break
“`
#### **2.2 枚举值**
“`python
i = 0
while True:
try:
name, value, type = winreg.EnumValue(key, i)
print(f”值 {i}: {name} = {value} (类型: {type})”)
i += 1
except OSError:
break
“`
—
### **3. 常用根键常量**
| 常量 | 对应注册表路径 |
|————————–|———————–|
| `winreg.HKEY_CLASSES_ROOT` | HKEY_CLASSES_ROOT |
| `winreg.HKEY_CURRENT_USER` | HKEY_CURRENT_USER |
| `winreg.HKEY_LOCAL_MACHINE` | HKEY_LOCAL_MACHINE |
| `winreg.HKEY_USERS` | HKEY_USERS |
| `winreg.HKEY_CURRENT_CONFIG` | HKEY_CURRENT_CONFIG |
—
### **4. 数据类型对照表**
| 类型常量 | 说明 | 示例数据格式 |
|———————–|———————–|——————-|
| `winreg.REG_SZ` | 字符串 | “Hello” |
| `winreg.REG_DWORD` | 32位整数 | 1 |
| `winreg.REG_QWORD` | 64位整数 | 1234567890 |
| `winreg.REG_BINARY` | 二进制数据 | b’\x01\x02\xFF’ |
| `winreg.REG_MULTI_SZ` | 多行字符串数组 | [“Line1”, “Line2″]|
—
### **5. 完整示例:创建启动项**
“`python
import winreg
def add_startup_program():
try:
# 打开Run键
key = winreg.OpenKey(
winreg.HKEY_CURRENT_USER,
r”Software\Microsoft\Windows\CurrentVersion\Run”,
0,
winreg.KEY_SET_VALUE
)
# 添加启动项
winreg.SetValueEx(
key,
“MyApp”, # 值名称
0, # reserved
winreg.REG_SZ,
r”C:\Program Files\MyApp\app.exe” # 程序路径
)
print(“启动项添加成功”)
except WindowsError as e:
print(f”操作失败: {e}”)
finally:
winreg.CloseKey(key)
add_startup_program()
“`
—
### **6. 注意事项**
1. **管理员权限**:修改`HKEY_LOCAL_MACHINE`需要以管理员身份运行Python
2. **注册表备份**:重要修改前建议导出备份(右键 → 导出)
3. **路径格式**:使用原始字符串(`r”path”`)避免转义问题
4. **错误处理**:始终用`try-except`捕获`WindowsError`
5. **键关闭**:操作完成后调用`CloseKey()`(或使用`with`语句)
—
### **7. 高级技巧:使用上下文管理器**
“`python
with winreg.OpenKey(winreg.HKEY_CURRENT_USER, r”Software”) as key:
value = winreg.QueryValueEx(key, “Version”)[0]
# 自动关闭key
“`
通过`winreg`模块,你可以完全控制Windows注册表,但请谨慎操作,错误的修改可能导致系统不稳定!