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

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 icHKCU = 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 winregmainkey = 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 icHKCU = 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 icHKCU = winreg.HKEY_CURRENT_USER
all_subkey = []
key = winreg.OpenKey(HKCU, 'System')  # 只能以只读形式打开,否则会报错
try:step = 0while 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 winregHKCU = 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 = 0while True:# EnumValue方法用来枚举子健下面的值项,EnumKey用来枚举子键value, data, typeNo = winreg.EnumValue(key, j)ic(value, data, typeNo)j += 1
except WindowsError as e:ic(e)# 记得关闭keyif 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 winregHKCU = 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 winregHKCU = 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 icHKCU = 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://xiahunao.cn/news/2661515.html

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

相关文章

【React】echarts-for-react 的使用

文章目录 echarts-for-react :一个简单的 Apache echarts 的 React 封装配置项手册:https://echarts.apache.org/zh/option.html#title 安装依赖 $ npm install --save echarts-for-react# echarts 是 echarts-for-react的对等依赖,您可以使用自己的版本…

MCEWMDRMNDBootstrap.dll文件丢失,软件游戏无法启动,怎样下载修复

不少小伙伴反馈,在打开某些游戏或软件的时候,Windows会提示“MCEWMDRMNDBootstrap.dll文件丢失,软件无法启动”,不知道应该怎样办? 首先,我们先来了解“MCEWMDRMNDBootstrap.dll文件”是什么? …

Qt/C++音视频开发61-多屏渲染/一个解码渲染到多个窗口/画面实时同步

一、前言 多屏渲染就是一个解码线程对应多个渲染界面,通过addrender这种方式添加多个绘制窗体,我们经常可以在展会或者卖电视机的地方可以看到很多电视播放的同一个画面,原理应该类似,一个地方负责打开解码播放,将画面…

geemap学习笔记037:分析地理空间数据--坐标格网和渔网

前言 坐标格网(Coordinate Grid)简称“坐标网”,是按一定纵横坐标间距,在地图上划分的格网,坐标网是任何地图上不可缺少的要素之一。下面将详细介绍一下坐标格网和渔网。 1 导入库并显示地图 import ee import geem…

请问仿写arkts摇杆功能,为什么我的代码,TouchType.Up 时候摇杆动画不能还原呢?请求大佬指点一下

仿照黑马的arkts 写个摇杆功能,但是为什么我的代码,TouchType.Up 时候摇杆动画不能还原, 请求大佬指点一下 import router from ohos.router import curves from ohos.curvesEntry Component struct ItemPage7 {// 小鱼坐标State fishX: nu…

java代码审计 - OutputStream.write() 期间持续发生 XSS 攻击

** java - OutputStream.write() 期间持续发生 XSS 攻击 ** 1 漏洞概述 我一直在研究有关持久 XSS 攻击的安全问题 将未经验证的数据发送到网络浏览器,这可能会导致浏览器执行恶意代码。 代码采用 Java 语言。 void output(OutputStream out){out.write(byteDa…

中小型企业为什么需要CRM系统?CRM系统功能解析

巴菲特曾说:“设计出的工具越多,使用工具的人就得越聪明。“”如果您是中小企业主,想要企业更好地发展,您都可以考虑使用CRM管理系统。它可以帮助中小企业有效地管理客户,提高业务效率,实现快、稳、准的发展…

Miniconda 3 | 出发,探索Python

介绍 Miniconda 是 Anaconda 的精简版本,是一个轻量级的 Python 包管理工具和环境管理工具。 优势和功能主要包括: 轻量级和快速安装: Miniconda 相比 Anaconda 更小巧,只包含最基本的工具和包管理功能。安装速度更快&#xff0c…

基于图神经网络的动态物化视图管理

本期 Paper Reading 主要介绍了发布于 2023 年 ICDE 的论文《Dynamic Materialized View Management using Graph Neural Network》,该文研究了动态物化视图管理问题,提出了一个基于 GNN 的模型。在真实的数据集上的实验结果表明,取得了更高的…

进行VMware日志管理

随着公司转向虚拟化其 IT 空间,虚拟环境日志监控正在占据日志管理的很大一部分,除了确保网络安全外,虚拟机日志监控还有助于管理虚拟化工具,这是最复杂的任务之一。 对虚拟环境日志的监控分析 当今公司中最受欢迎的虚拟平台之一是 VMware。…

爬虫学习(1)--requests模块的使用

前言 什么是爬虫 爬虫是一种自动化工具,用于从互联网或其他计算机网络上获取数据。它可以模拟人的行为,自动访问网页,提取感兴趣的数据,并将其存储到本地计算机或数据库中。爬虫通常用于搜索引擎、数据分析、信息聚合等领域&…

gin框架使用系列之三——获取表单数据

系列目录 《gin框架使用系列之一——快速启动和url分组》《gin框架使用系列之二——uri占位符和占位符变量的获取》 一、获取get参数 get请求的参数是直接加在url后面的,在gin中获取get请求的参数主要用Query()和DefaultQuery()两个方法,示例代码如下…

「Verilog学习笔记」超前进位加法器

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 超前进位加法器的实质是:对于输出的每一位Si 其实都可以用Si Ai ^ Bi ^ Cin来表示 我们需要做的只是判断加法结果的最高位该取几 例如本题中 输入的两个数A和B…

7.6分割回文串(LC131-M)

算法: 有很多分割结果,按照for循环去做肯定做不来 这个时候就要想到回溯!那就要画树! 画树 分割的画树过程其实和组合很像。 例如对于字符串aab: 组合问题:选取一个a之后,在ab中再去选取第…

IDEA 2022.2 安装教程

1.下载2020.3版本IDEA 链接:https://pan.baidu.com/s/1IFK8VRjT7vM2VM75ToveGQ?pwd176m 提取码:176m 2.安装 下载完成后,双击exe安装包,出现IDEA安装欢迎首页: 3.将 ja - netfiltet 文件复制到idea安装目录附件 …

docker学习笔记04-可视化界面Portainer

1.Portainer简介 Portainer 是一款开源的容器管理工具,旨在帮助用户更轻松地管理 Docker 环境。无论您是 Docker 新手还是经验丰富的开发人员,Portainer 都提供了直观的用户界面,使您能够方便地创建、部署和监控容器。 安装 Portainer 非常…

Docker本地部署开源浏览器Firefox并远程访问进行测试

文章目录 1. 部署Firefox2. 本地访问Firefox3. Linux安装Cpolar4. 配置Firefox公网地址5. 远程访问Firefox6. 固定Firefox公网地址7. 固定地址访问Firefox Firefox是一款免费开源的网页浏览器,由Mozilla基金会开发和维护。它是第一个成功挑战微软Internet Explorer浏…

Windows不同的域名由不同的DNS服务器解析

gpedit.msc(组策略)-计算机配置-Windows设置-域名解析策略 本次改动在注册表中体现的位置。 计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Dnscache\Parameters\DnsPolicyConfig\{666881c9-5525-434b-a62a-2ed5c61d53e5} 计算机\HKEY_LOCAL_MACHINE\SYSTEM\Cur…

FileZilla的使用主动模式与被动模式

🎬 艳艳耶✌️:个人主页 🔥 个人专栏 :《产品经理如何画泳道图&流程图》 ⛺️ 越努力 ,越幸运 目录 一、FileZilla简介 1、FileZilla是什么? 2、FileZilla的应用场景 二、FileZilla的安装 1、下…

YoloV8改进策略:基于自研的图注意力机制改进| 独家改进方法|图卷积和注意力融合模块

摘要 SE注意力机制是一种通过显式建模卷积特征的信道之间相互依赖性的方法,旨在提高网络产生的表示的质量。SE注意力机制包括两个步骤:Squeeze和Excitation。在Squeeze步骤中,通过全局平均池化操作将输入特征图压缩成一个向量,然后通过一个全连接层将其映射到一个较小的向…