[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://www.hqwc.cn/news/300384.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

w15php系列之基础类型

一、计算100之内的偶数之和 实现思路 所有的偶数除2都为0 代码实现 <?php # 记录100以内的偶数和 $number1; $num0; while($number<100){if($number%20){ $num$number;}$number1; } echo $num; ?>输出的结果 二、计算100之内的奇数之和 实现思路 所有的奇数除…

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

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

AssertionError: The environment must specify an action space. 报错 引发的惨案

起因是&#xff1a;从github上下载了一个代码&#xff0c;运行出错。 整体流程&#xff1a; 1. AssertionError: The environment must specify an action space. 报错&#xff0c;解决方案是 降级gym到 gym0.18.0 2.为了降级gym gym0.18.0 报错&#xff0c;发现需要降级 setup…

Android---Kotlin 学习009

继承 在 java 里如果一个类没有被 final 关键字修饰&#xff0c;那么它都是可以被继承的。而在 kotlin 中&#xff0c;类默认都是封闭的&#xff0c;要让某个类开放继承&#xff0c;必须使用 open 关键字修饰它&#xff0c;否则会编译报错。此外在子类中&#xff0c;如果要复写…

助力打造清洁环境,基于YOLOv7开发构建公共场景下垃圾堆放垃圾桶溢出检测识别系统

公共社区环境生活垃圾基本上是我们每个人每天几乎都无法避免的一个问题&#xff0c;公共环境下垃圾投放点都会有固定的值班时间&#xff0c;但是考虑到实际扔垃圾的无规律性&#xff0c;往往会出现在无人值守的时段内垃圾堆放垃圾桶溢出等问题&#xff0c;有些容易扩散的垃圾比…

二维码智慧门牌管理系统:提升社区管理智能化水平

文章目录 前言一、全方位信息录入与查询二、公安权限账户访问的公安大数据后台三、社区工作人员申请权限安装录入软件四、业主通过移动终端扫描标准地址二维码门牌自主申报录入五、系统的价值 前言 在数字化时代&#xff0c;社区管理面临着更新流动人口信息、准确录入六实相关…

Jupyter Notebook的安装及在网页端和VScode中使用教程(详细图文教程)

目录 一、Jupyter Notebook1.1 组成组件1.2 优点1.3 常规用途 二、安装及使用2.1 网页端2.1.1 安装Jupyter Notebook2.1.2 检验是否安装成功2.1.3 启动Jupyter Notebook2.1.4 使用Jupyter Notebook 2.2 VScode中安装及使用2.2.1 安装Jupyter2.2.2 使用Jupyter 三、常用命令3.1 …

SpringBoot Event,事件驱动轻松实现业务解耦

什么是事件驱动 Spring 官方文档AWS Event Driven 简单来说事件驱动是一种行为型设计模式&#xff0c;通过建立一对多的依赖关系&#xff0c;使得当一个对象的状态发生变化时&#xff0c;所有依赖它的对象都能自动接收通知并更新。即将自身耦合的行为进行拆分&#xff0c;使拆…

Rancher小白学习之路

官网&#xff1a;http://docs.rancher.cn/docs/rancher1/rancher-service/load-balancer/_indexhttp://docs.rancher.cn/docs/rancher1/rancher-service/load-balancer/_indexRancher2.5集群搭建&K3S生产环境搭建手册 - 知乎 【rancher教程】十年运维大佬两小时带你搞定ran…

Django-REST-Framework 如何快速生成Swagger, ReDoc格式的 REST API 文档

1、API 接口文档的几种规范格式 前后端分离项目中&#xff0c;使用规范、便捷的API接口文档工具&#xff0c;可以有效提高团队工作效率。 标准化的API文档的益处&#xff1a; 允许开发人员以交互式的方式查看、测试API接口&#xff0c;以方便使用将所有可暴露的API接口进行分…

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

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

CMMI-项目总体计划模版

目录 1、总体目录结构 2、重点章节概要示例 2.1 第四章 项目管理 2.2 第六章 实施与交付计划 2.3 第七章 运维计划 1、总体目录结构 2、重点章节概要示例 2.1 第四章 项目管理 2.2 第六章 实施与交付计划 2.3 第七章运维计划