[Python进阶] 操作注册表:winreg

news2025/3/21 2:13:33

5.22 操作注册表:winreg

5.22.1 注册表概念

在Windows系统中,注册表本质上就是一个数据库,其中存放着硬件、软件、用户、操作系统以及程序相关设置信息。我们除了使用Windows系统自带的regedit程序,也可以通过Python编程读取并操作系统注册表。

5.22.2 注册表的组成部分

键(主键、项)key:相当于文件夹
子键(子项)sub_key:相当于子文件夹
值value:相当于文件,包括类型(相当于文件类型:type)、数据(相当于文件内容data)
如下图:
在这里插入图片描述

5.22.3 注册表的数据类型

常见的注册表值的数据类型一共有4种:

  • REG_SZ:字符串,文本字符串
  • REG_MULTI_SZ:多字符串值,含有多个文本值的字符串
  • REG_BINARY:二进制数,以十六进制显示,
  • REG_DWORD:双字值,一个32位的二进制值,显示为8位的十六进制值。

5.22.4 winreg:键的操作

5.22.4.1 打开、关闭键:OpenKey()、CloseKey()

语法:
key = winreg.OpenKey(key, sub_key[, res[, sam]])
winreg.CloseKey(key)

import winreg
from icecream import ic

HKCU = winreg.HKEY_CURRENT_USER
for subkey in ['test', 'test2', 'test3']:
    try:
        key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, subkey)  # 只读
        if key:
            winreg.CloseKey(key)
        else:
            ic(key)
    except FileNotFoundError:
        ic(f'找不到键:{subkey}')

写入打开

import winreg

mainkey = winreg.HKEY_CURRENT_USER
sub_key = r'Software\Microsoft\Internet Explorer\Main'
key = winreg.OpenKey(mainkey, subkey, 0, winreg.KEY_WRITE)
5.22.4.2 创建、删除键:CreateKey()、DeleteKey()

创建键就是在key下创建一个subkey,返回值指向subkey
语法:subkey = winreg.CreateKey(key,sub_key)
删除键就是删除指定的键的子健
语法:winreg.DeleteKey(key,sub_key)

import winreg
from icecream import ic

HKCU = winreg.HKEY_CURRENT_USER
sub_key1 = winreg.CreateKey(HKCU, 'test')
sub_key2 = winreg.CreateKey(HKCU, r'test2\t2')  # 连续创建键
ic(sub_key2)
sub_key3 = winreg.CreateKey(HKCU, 'test2')
winreg.DeleteKey(sub_key3, 't2')

说明:
1、已存在键后,再创建键不会报错。
2、若要删除的键存在子健,则无法删除。

5.22.4.3 获取某个键的所有子健
import winreg
from icecream import ic

HKCU = winreg.HKEY_CURRENT_USER
all_subkey = []
key = winreg.OpenKey(HKCU, 'System')  # 只能以只读形式打开,否则会报错
try:
    step = 0
    while True:
        all_subkey.append(winreg.EnumKey(key, step))
        step += 1
except WindowsError:
    ic('已获取全部子健!')
except Exception as err:
    ic('发生错误,错误原因:{}'.format(err))
finally:
    if key:
        winreg.CloseKey(key)

ic(all_subkey)

15:12:08|> ‘已获取全部子健!’
15:12:08|> all_subkey: [‘CurrentControlSet’, ‘GameConfigStore’]

注意:
1、只能获取到目标键的子健,无法获取更下一层的键。

5.22.4.4 查询键相关信息
from icecream import ic
import winreg

HKCU = winreg.HKEY_CURRENT_USER
subkey = r'SOFTWARE\360FileBrowser'
key = winreg.OpenKey(HKCU, subkey)
ic(winreg.QueryInfoKey(key)) # 第一个为键的子健数,第二个为键的值数

16:20:28|> winreg.QueryInfoKey(key): (3, 7, 133383550399900567)

5.22.5 winreg:值的操作

5.22.5.1 枚举键下面所有值的信息
from icecream import ic
import winreg
HKCU = winreg.HKEY_CURRENT_USER
subkey = r'SOFTWARE\360FileBrowser'
key = winreg.OpenKey(HKCU, subkey)
try:
    j = 0
    while True:
        # EnumValue方法用来枚举子健下面的值项,EnumKey用来枚举子键
        value, data, typeNo = winreg.EnumValue(key, j)
        ic(value, data, typeNo)
        j += 1
except WindowsError as e:
    ic(e)
    # 记得关闭key
    if key:
        winreg.CloseKey(key)
        ic('关闭键成功')

16:15:15|> value: ‘guide’, data: 1, typeNo: 4
16:15:16|> value: ‘dot’, data: 0, typeNo: 4
16:15:16|> value: ‘maximize’, data: 1, typeNo: 4
16:15:16|> value: ‘wnd_left’, data: 4294965696, typeNo: 4
16:15:16|> value: ‘wnd_top’, data: 0, typeNo: 4
16:15:16|> value: ‘wnd_right’, data: 0, typeNo: 4
16:15:16|> value: ‘wnd_bottom’, data: 860, typeNo: 4
16:15:16|> e: OSError(22, ‘没有可用的数据了。’, None, 259, None)
16:15:16|> ‘关闭键成功’

5.22.5.2 读取值的信息
from icecream import ic
import winreg

HKCU = winreg.HKEY_CURRENT_USER
subkey = r'Software\Microsoft\Internet Explorer\Main'
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, subkey)
value = "UseClearType"
data, type_no = winreg.QueryValueEx(key, value)
ic(data, type_no)

16:29:24|> data: ‘no’, type_no: 1

5.22.5.3 修改值的数据
import winreg

HKCU = winreg.HKEY_CURRENT_USER
subkey = r'test'
Key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, subkey, 0, winreg.KEY_WRITE)
# 字符串格式(REG_SZ)修改:
winreg.SetValueEx(Key, "zifuchuan", 0, winreg.REG_SZ, 'zfc')  # 将`Key`下的`zifuchuan`值的数据修改为'zfc'
# 十六进制格式修改(REG_DWORD)
winreg.SetValueEx(Key, 'shiliujinzhi', 0, winreg.REG_DWORD, 0x00000001)  # 将`Key`下的`shiliujinzhi`值的数据修改为'0x00000001'
# 二进制格式修改(REG_BINARY)
jrx = b'abc'
winreg.SetValueEx(Key, 'erjinzhi', 0, winreg.REG_BINARY, jrx)  # 将`Key`下的`erjinzhi`值的数据修改为b'abc'
5.22.5.4 删除值
import winreg
from icecream import ic

HKCU = winreg.HKEY_CURRENT_USER
key = winreg.OpenKey(HKCU, r'test2\t2', 0, winreg.KEY_WRITE)
ic(winreg.DeleteValue(key, '新值'))

15:52:39|> winreg.DeleteValue(key, ‘新值’): None

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1335888.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3分钟了解安全数据交换系统有什么用!

企业为了保护核心数据安全,都会采取一些措施,比如做网络隔离划分,分成了不同的安全级别网络,或者安全域,接下来就是需要建设跨网络、跨安全域的安全数据交换系统,将安全保障与数据交换功能有机整合在一起&a…

RK3588平台开发系列讲解(AI 篇)RKNN-Toolkit2 模型的加载转换

文章目录 一、Caffe 模型加载接口二、TensorFlow 模型加载接口三、TensorFlowLite 模型加载接口四、ONNX 模型加载五、DarkNet 模型加载接口六、PyTorch 模型加载接口沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 RKNN-Toolkit2 目前支持 Caffe、TensorFlow、Tensor…

Navicat误删除生产环境SQLServer2012单表数据后恢复单表数据

背景: 1-后端更新功能部署到客户生产环境时误将测试环境数据保留,项目负责人发现后告知后端。 2-后端登录客户生产数据库使用navicat删除一张表的单表数据时多删了几条数据,判断弄乱了客户生产环境下自己产生的单表数据。 思路&#xff…

DML语言(重点)———update

格式:update 要修改的对象 set 原来的值新值 -- 修改学员名字,带了简介 代码案例: -- 修改学员名字,带了简介 UPDATE student SET name清宸 WHERE id 1; -- 不指定条件情况下,会改动所有表! 代码案例…

【MySQL】数据库之存储引擎

目录 一、什么是存储引擎 MySQL 整个查询执行过程,即MySQL的工作原理? 二、MyISAM 与 InnoDB 的区别? 三、如何查看当前表的存储引擎? 1.查看当前的存储引擎 2.查看数据库支持哪些存储引擎 四、如何设置存储引擎?…

CentOS系统环境搭建(二十六)——使用nginx在无域名情况下使用免费证书设置https

centos系统环境搭建专栏🔗点击跳转 文章目录 使用nginx在无域名情况下使用免费证书设置https1.获取SSL证书1.1 生成SSL密钥1.2 生成SSL证书1.3 重命名密钥文件 2.nginx配置https2.1 放证书2.2 修改nginx.conf文件2.2.1 将80端口重定向到4432.2.2 端口443配置ssl证书…

ubuntu18设置开机自启动

项目需求:机器人开机上电后工控机首先运行机械臂控制代码,再运行算法代码 1.终端执行以下代码 gnome-session-properties 2.设置开机自启动选项 在弹出界面点击添加,名称随便填,命令填入要启动的脚本,注释随便填。 …

sigmoid softmax优化

1.前言 最近在搞模型部署发现,推理速度不能满足我们需求,于是最近学习了优化算子技巧,学到了sigmoid,softmax算子优化,真的数学之美。2.sigmoid算子优化 一.算子优化图 我们根据sigmoid公式,我们进行求反…

C语言字符串处理提取时间(ffmpeg返回的时间字符串)

【1】需求 需求:有一个 “00:01:33.90” 这样格式的时间字符串,需要将这个字符串的时间值提取打印出来(提取时、分、秒、毫秒)。 这个时间字符串从哪里来的? 是ffmpeg返回的时间,也就是视频的总时间。 下…

Java之Atomic 原子类总结

Java之Atomic 原子类总结 Atomic 原子类介绍 Atomic 翻译成中文是原子的意思。在化学上,我们知道原子是构成一般物质的最小单位,在化学反应中是不可分割的。在我们这里 Atomic 是指一个操作是不可中断的。即使是在多个线程一起执行的时候,一…

TypeScript学习(进阶篇)

一、元组 数组合并了相同类型的对象,而元组(Tuple)合并了不同类型的对象。 元组起源于函数编程语言(如 F#),这些语言中会频繁使用元组。 简单的例子 定义一对值分别为 string 和 number 的元组&#xf…

计算机视觉基础(13)——深度估计

前言 本节是计算机视觉的最后一节,我们将学习深度估计。从深度的概念和度量入手,依次学习单目深度估计和双目/多目深度估计,需要知道深度估计的经典方法,掌握深度估计的评价标准,注意结合对极几何进行分析和思考。 一、…

成为小leader后,最大的感受就是:领导真的更偏爱主动汇报的下属!

* 你好,我是前端队长,在职场,玩副业,文末有福利! 有些朋友在职场,可能会陷入一个误区,觉得我们的付出,领导都能看到。这就大错特错了,很简单,打个比方,你有10…

申请虚拟VISA卡Pokepay 教程来了

官网地址https://www.pokepay.cc/ ​​​​​ 填写邮箱地址 填写邀请码116780 会有20USD开卡优惠券 限时几天活动

网络安全法规和模型

基础 ISO信息安全:为数据处理系统建立和采取技术、管理的安全保护,保护计算机硬件、软件、数据不因偶然的或恶意的原因而受到破坏、更改、泄露 信息安全属性: CIA三元组:保密性、完整性、可用性 其他属性:真实性、不…

微短剧,会成为长视频的“救命稻草”吗?

职场社畜秒变霸道总裁,普通女孩穿越成为艳丽皇妃.......这样“狗血”的微短剧,最近不仅在国内各大视频平台上异常火爆,而且还直接火出了国外。 所谓微短剧,就是单集时长从几十秒到十几分钟的剧集,有着相对明确的主题和…

Android 手机对于Arduino蓝牙控制解决方案

1、Android系统概述 ​ Android 系统是 Google 公司基于 Linux 内核开发的移动端操作系统,适用于智能手机智能手表平板电脑等设备,最新的版本为 7.1。Android系统具有免费开源的优势,任何企业与个人都可以查阅公开的 API 文档,并在自己开发的应用中通过调…

【Gitlab】CICD流水线自动化部署教程

第一步,准备 GitLab 仓库 这个不用多说,得先保证你的项目已经托管在一个 GitLab 仓库中。 第二步,定义 .gitlab-ci.yml 文件 在你的项目根目录中创建一个 .gitlab-ci.yml 文件。这个文件将定义所有 CI/CD 的工作流程,包括构建、测…

IPC之十:使用共享文件进行进程间通信的实例

IPC 是 Linux 编程中一个重要的概念,IPC 有多种方式,常用的 IPC 方式有管道、消息队列、共享内存等,但其实使用广大程序员都熟悉的文件也是可以完成 IPC 的,本文介绍如何使用共享文件实现进程间通信,本文给出了具体的实…

基于电商场景的高并发RocketMQ实战-Commitlog基于内存的高并发写入优化、基于JVM offheap的内存读写分离机制

🌈🌈🌈🌈🌈🌈🌈🌈 【11来了】文章导读地址:点击查看文章导读! 🍁🍁🍁🍁🍁🍁&#x1f3…