利用python读取windows注册表的方法详解

 更新时间:2025年09月23日 08:46:38   作者:NotOnlyAnAnswer  
在windows系统中,注册表 是系统定义的数据库,应用程序和系统组件在其中存储和检索配置数据,本文将为大家整理Python读取windows注册表的相关方法,希望对大家有所帮助

在windows系统中,注册表 是系统定义的数据库,应用程序和系统组件在其中存储和检索配置数据。

注册表是一个分层数据库,其中包含对 Windows本身以及Windows上运行的应用程序和服务至关重要的数据。 因此我们还是不好进行随意操作,但是查看注册表的信息可以让我们更加了解系统的运行情况。

数据以树格式进行结构化。树中的每个节点称为键。每个键可以同时包含子项和数据条目,称为值。

通过查看注册表的数据我们可以发现一些比较有趣的系统信息。比如我们可以通过注册表看到用户定义的环境变量

也可以查看菜单在文件夹空白处右键的菜单操作。

以下是使用python3对注册表进行读取的代码。

import winreg



def enumerate_registry_values(key, sub_key):
    """
    枚举注册表键中的所有值
    :param key_path: 注册表键路径
    """
    # key  可以是一个打开的key,或者winreg预定义的值HKEY_* constants
    try:
        reg_key = winreg.OpenKey(key, sub_key, 0, winreg.KEY_READ)
    except OSError:
        print(f"can't open key {key}/{sub_key}")
        return
    values = []
    index = 0
    while True:
        try:
            # 枚举值
            value_name, value_data, value_type = winreg.EnumValue(reg_key, index)
            values.append((value_name, value_data, value_type))
            index += 1
        except OSError:
            # 当没有更多值时跳出循环
            break
    winreg.CloseKey(key)
    print(f"枚举值成功 - 路径: {key}{sub_key}, 值数量: {len(values)}")
    for name, data, type_ in values:
        print(f"  名称: {name}, 值: {data}, 类型: {type_}")


print("基于注册表查看用户环境变量")
# 查看用户定义的环境变量路径是:HKEY_CURRENT_USER\Environment
enumerate_registry_values(winreg.HKEY_CURRENT_USER,"Environment")

def get_children_key_names(key, sub_key):
    """
    获取key的子节点的key
    并且以数组返回
    """
    # key  可以是一个打开的key,或者winreg预定义的值HKEY_* constants
    reg_key = winreg.OpenKey(key, sub_key, 0, winreg.KEY_READ)
    sub_key_names = []
    index = 0
    while True:
        try:
            # 枚举值
            sub_key_name = winreg.EnumKey(reg_key, index)
            sub_key_names.append(sub_key_name)
            index += 1
        except OSError:
            # 当没有更多值时跳出循环
            break
    winreg.CloseKey(key)
    return sub_key_names

print("基于注册表查看对文件夹右键菜单的操作")
# 遍历路径:\HKEY_CLASSES_ROOT\Directory\Background\shell,查看针对文件夹中空白处右键菜单的操作
sub_key_names=get_children_key_names(winreg.HKEY_CLASSES_ROOT,r"Directory\Background\shell")
for sub_key_name in sub_key_names:
    # 菜单的操作在command的值中
    enumerate_registry_values(winreg.HKEY_CLASSES_ROOT,r'Directory\Background\shell\\'+""+sub_key_name+r"\command")

输出如下:

方法补充

python操作注册表的方法及应用

1.打开注册表

可以使用winreg模块的OpenKey()方法打开注册表。该方法的参数是一个表示注册表项的句柄和一个表示要打开的子项的名称的字符串。如果要打开的子项不存在,将会抛出一个WindowsError异常。

下面是打开注册表的示例代码:

import winreg

# 打开HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer键
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r'Software\Microsoft\Windows\CurrentVersion\Explorer')

在上面的代码中,我们首先使用winreg.HKEY_CURRENT_USER常量表示HKEY_CURRENT_USER根键。然后使用winreg.OpenKey()方法打开注册表项Software\Microsoft\Windows\CurrentVersion\Explorer,并将结果保存在变量key中。

2.读取注册表值

可以使用winreg模块的QueryValue()方法读取注册表值。该方法的参数是一个表示注册表项的句柄和一个表示要读取的值的名称的字符串。如果要读取的值不存在,将会抛出一个WindowsError异常。

下面是读取注册表值的示例代码:

import winreg
# 打开HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer键
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r'Software\Microsoft\Windows\CurrentVersion\Explorer')
# 读取StartPage键的值
value = winreg.QueryValue(key, 'StartPage')
print(value)

在上面的代码中,我们首先使用winreg.OpenKey()方法打开注册表项Software\Microsoft\Windows\CurrentVersion\Explorer,并将结果保存在变量key中。然后使用winreg.QueryValue()方法读取StartPage键的值,并将结果保存在变量value中。最后打印value的值。

3.写入注册表值

可以使用winreg模块的SetValue()方法写入注册表值。该方法的参数是一个表示注册表项的句柄、一个表示要写入的值的名称的字符串和一个表示要写入的值的类型的常量。如果要写入的值已存在,将会覆盖原有的值。

下面是写入注册表值的示例代码:

import winreg
# 打开HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer键
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r'Software\Microsoft\Windows\CurrentVersion\Explorer', 0, winreg.KEY_WRITE)
# 写入TestValue键的值
winreg.SetValue(key, 'TestValue', winreg.REG_SZ, 'Hello, World!')

在上面的代码中,我们首先使用winreg.OpenKey()方法打开注册表项Software\Microsoft\Windows\CurrentVersion\Explorer,并将结果保存在变量key中。然后使用winreg.SetValue()方法写入TestValue键的值。需要注意的是,我们需要将要写入的值的类型作为winreg.SetValue()方法的第三个参数传入,并使用常量表示类型。

4. 关闭注册表

在操作注册表之后,我们需要关闭注册表。可以使用winreg模块的CloseKey()方法关闭注册表。该方法的参数是一个表示注册表项的句柄。

下面是关闭注册表的示例代码:

import winreg
# 打开HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer键
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r'Software\Microsoft\Windows\CurrentVersion\Explorer')
# 关闭注册表
winreg.CloseKey(key)

在上面的代码中,我们首先使用winreg.OpenKey()方法打开注册表项Software\Microsoft\Windows\CurrentVersion\Explorer,并将结果保存在变量key中。然后使用winreg.CloseKey()方法关闭注册表。

5.python 读取注册表项值

import winreg  # 导入winreg库

reg_path = r"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer"  # 注册表路径
reg_key_name = "Shell Folders"  # 要读取的具体项名

try:
    reg_key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, reg_path)  # 打开注册表项
    value, regtype = winreg.QueryValueEx(reg_key, reg_key_name)  # 读取注册表项的值
except WindowsError as e:  # 捕捉 Windows 错误
    print(f"发生错误: {e}")  # 输出错误信息
else:
    print(f"读取到的值: {value}")  # 输出注册表项的值
finally:
    winreg.CloseKey(reg_key)  # 关闭注册表项

到此这篇关于利用python读取windows注册表的方法详解的文章就介绍到这了,更多相关python读取windows注册表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python 中省略号对象的使用

    Python 中省略号对象的使用

    作为一名经验丰富的 Python 开发人员,您可能遇到过 Python 中的三个点…省略号对象, 如果您尝试在 Python 解释器中打印此内容,它将显示一个省略号,本篇文章将介绍 Python 中省略号对象的使用,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • pandas数据合并与重塑之merge详解

    pandas数据合并与重塑之merge详解

    这篇文章主要介绍了pandas数据合并与重塑之merge,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法

    Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法

    这篇文章主要介绍了Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法,需要的朋友可以参考下
    2018-09-09
  • 详解Python用户登录接口的方法

    详解Python用户登录接口的方法

    这篇文章主要介绍了Python用户登录接口的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Python OpenCV快速入门教程

    Python OpenCV快速入门教程

    这篇文章主要介绍了Python OpenCV快速入门教程,帮助大家更好的利用opencv处理图像,感兴趣的朋友可以了解下
    2021-04-04
  • 18 个 Python 编程技巧,提高工作效率

    18 个 Python 编程技巧,提高工作效率

    这篇文章主要分享的是18个Python编程技巧,文章围绕 Python的相关资料展开详细全文,对工作中的你了能具有一定的参考价值,需要的朋友可以参考一下,希望对你有所帮助
    2022-01-01
  • Python中对URL进行编码的操作

    Python中对URL进行编码的操作

    URL编码是一种将非ASCII字符转换为ASCII字符序列的过程,以便在网络上传输URL时保持它们的有效性和兼容性,在Python中,我们可以使用内置的urllib.parse模块来进行URL编码,本文给大家介绍的非常详细,需要的朋友可以参考下
    2024-10-10
  • python实现事件驱动

    python实现事件驱动

    这篇文章主要为大家详细介绍了python实现事件驱动的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • Python中提取人脸特征的三种方法详解

    Python中提取人脸特征的三种方法详解

    这篇文章主要和大家分享三个Python中提取人脸特征的方法,文中的示例代码讲解详细,对我们学习Python有一定的帮助,需要的可以参考一下
    2022-05-05
  • 基于Python实现Excel转Markdown表格

    基于Python实现Excel转Markdown表格

    Markdown(也简称md)作为一种轻量级标记语言,因其易写易读,效果美观大方,不仅被众多网站使用,也是程序员们做笔记、写文档的首选。本文将利用Python实现Excel转Markdown表格,感兴趣的可以了解一下
    2022-04-04

最新评论