Python3使用winreg模块操作Windows注册表详解

唐可
唐可
发布时间:2026-10-13| 3人浏览过
原创

本文详细介绍如何在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()

本文介绍到此结束,感谢支持。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。