当前位置: 首页 > news >正文

使用python读取windows注册表

在windows系统中,注册表 是系统定义的数据库,应用程序和系统组件在其中存储和检索配置数据。
注册表是一个分层数据库,其中包含对 Windows本身以及Windows上运行的应用程序和服务至关重要的数据。 因此我们还是不好进行随意操作,但是查看注册表的信息可以让我们更加了解系统的运行情况。
数据以树格式进行结构化。树中的每个节点称为键。每个键可以同时包含子项和数据条目,称为值。
通过查看注册表的数据我们可以发现一些比较有趣的系统信息。比如我们可以通过注册表看到用户定义的环境变量,

reg1

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

reg2

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

import winregdef enumerate_registry_values(key, sub_key):"""枚举注册表键中的所有值:param key_path: 注册表键路径"""# key  可以是一个打开的key,或者winreg预定义的值HKEY_* constantstry:reg_key = winreg.OpenKey(key, sub_key, 0, winreg.KEY_READ)except OSError:print(f"can't open key {key}/{sub_key}")returnvalues = []index = 0while True:try:# 枚举值value_name, value_data, value_type = winreg.EnumValue(reg_key, index)values.append((value_name, value_data, value_type))index += 1except OSError:# 当没有更多值时跳出循环breakwinreg.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_* constantsreg_key = winreg.OpenKey(key, sub_key, 0, winreg.KEY_READ)sub_key_names = []index = 0while True:try:# 枚举值sub_key_name = winreg.EnumKey(reg_key, index)sub_key_names.append(sub_key_name)index += 1except OSError:# 当没有更多值时跳出循环breakwinreg.CloseKey(key)return sub_key_namesprint("基于注册表查看对文件夹右键菜单的操作")
# 遍历路径:\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")

输出如下:

reg3

http://www.hskmm.com/?act=detail&tid=13850

相关文章:

  • 当日总结
  • 3123004481
  • 使用python读取windows日志表
  • 开机RAM分析调试SOP
  • 9.20 模拟赛 T4
  • 2025.9.21 测试 (a1a2a3a4a5)
  • 原码、反码和补码
  • Русский язык
  • 基于Hex Editor Neo的二进制文件模板
  • 【F#学习】字符
  • kubebuilder创建Operator示例
  • 集训总结(八)
  • 使用try-finally结构执行状态重置
  • java03预习
  • x6831卡顿分析
  • 实测对比:权威榜单之微信排版软件Top5(含详细测评)
  • 【F#学习】布尔运算优先级
  • 粘连字符验证码的分割与识别思路
  • 深入解析:【Spark+Hive+hadoop】基于spark+hadoop基于大数据的人口普查收入数据分析与可视化系统
  • part 8
  • 【本地音乐库】的搭建管理工具推荐
  • 扭曲变形验证码的图像处理与识别思路
  • 每日收获
  • C++中std::map容器中元素删除方法汇总 - 详解
  • 物理半程与半时问题
  • 从用户态到内核态:Windows CC 技术深度解析(第一篇:DNS隧道)
  • 9.22 科研小结:不要总是预设成功,失败才是常态
  • STM32光强传感器实验详解 - 实践
  • 在CodeBolcks下wxSmith的C++编程教程——从Hello world开始讲述wxSmith使用基础
  • 【Azure Batch】使用Start Task来挂载Storage Blob