Python3使用winreg模块操作Windows注册表详解
本文详细介绍如何在Python3中利用内置winreg模块读写Windows注册表。涵盖OpenKeyEx、CreateKey、SetValueEx及QueryValueEx等核心函数的用法,并通过完整代码示例演示如何配置URL Protocol以通过浏览器启动本地EXE程序。内容包含Python2与Python3的导入差异及常见错误处理。
Python3注册表操作概述
近期深入学习了利用Python操作Windows注册表的技术,特此整理相关笔记。尽管目前的代码结构尚显基础,未能达到高度封装的水平,但足以解决日常开发中的实际问题。
在讨论注册表操作时,顺带提及环境变量的修改方法(详见后续章节)。由于两者在操作逻辑上存在诸多相似之处,合并讲解有助于理解。
注册表操作核心
核心模块与函数用法
在Python3中操作注册表需引入winreg模块。该模块为Python3内置库,而在Python2中对应模块名为_winreg,本文仅针对Python3版本进行说明。
key = winreg.OpenKeyEx(winreg.HKEY_CLASSES_ROOT, r"路径的名字")
使用OpenKeyEx函数可打开指定的注册表项。若路径参数留空,则默认打开根目录。具体结构可参考图示说明。

在Windows系统中点击确定即可打开注册表编辑器界面。
代码中的winreg.HKEY_CLASSES_ROOT对应注册表编辑器中的根节点之一。用户可根据需求指定不同的根键名称来打开对应的注册表分支。
newKey = winreg.CreateKey(key,"文件名")
获取当前键名对应的值
winreg.QueryValueEx(key, '名称')

例如:winreg.QueryValueEx(key, 'PATH')
设置当前目录下的键值
winreg.SetValueEx(key,"名称",0,winreg.REG_EXPAND_SZ, "值")
完整代码示例与URL Protocol配置
示例代码
key = winreg.OpenKeyEx(winreg.HKEY_CLASSES_ROOT, r"")
#创建新的键
newKey = winreg.CreateKey(key,"aTest")
#给新创建的键添加键值
winreg.SetValueEx(newKey,"a1",0,winreg.REG_EXPAND_SZ,"aaa")
winreg.SetValueEx(newKey,"b1","star",1, "bbb")
#创建新的子键
key = winreg.OpenKeyEx(winreg.HKEY_CLASSES_ROOT, r"aTest")
newKey = winreg.CreateKey(key,"DefaultIcon")
winreg.SetValueEx(newKey,"",0,winreg.REG_EXPAND_SZ, "path ,1")
newKey = winreg.CreateKey(key,"shell")
key = winreg.OpenKeyEx(winreg.HKEY_CLASSES_ROOT, r"aTest\shell")
newKey = winreg.CreateKey(key,"open")
key = winreg.OpenKeyEx(winreg.HKEY_CLASSES_ROOT, r"aTest\shell\open")
newKey = winreg.CreateKey(key,"command")
winreg.SetValueEx(newKey,"url",0,winreg.REG_EXPAND_SZ, "\"path\" \"%1\"")

上述示例代码可用于配置URL Protocol,从而实现通过浏览器链接启动本地EXE程序的功能。只需将示例中的path替换为本地EXE的实际绝对路径即可生效。
版本差异与补充说明
Python注册表操作示例
以下主要展示通过Python内置模块winreg实现的一些典型Demo代码片段。
Python2需使用import _winreg,而Python3需使用import winreg。
#!python37
# -*- coding: utf-8 -*-
# coding:utf-8
import winreg
def obtain():
# 获取该键的所有键值
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\\Inspiry\\BasePay\\Address")
# 获取该键的所有键值,遍历枚举
try:
i = 0
while 1:
# EnumKey用来枚举子键,EnumValue方法用来枚举键值,
name, value, type1 = winreg.EnumValue(key, i)
# print(repr(name),value)
return value
i +=1
except WindowsError:
print('error')
if __name__ == '__main__':
obtain()
本文介绍到此结束,感谢支持。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









