winreg操作windows注册表详解示例

#coding:utf-8
#=====================================================================
#=====本程序演示了WINREG操作WINDOWS注册表的所有常见操作
#=====作者:dengpeiyou QQ:86074731 2019.01.12
#=====================================================================
import ctypes
import winreg
import os
#===============================================================打开子键
key=None
try:
key=winreg.OpenKey(winreg.HKEY_CURRENT_USER,r"software")
except Exception as error_txt:
#提示
#ctypes.windll.user32.MessageBoxW(None,str(error_txt),'打开',0)
ctypes.windll.user32.MessageBoxW(None,'打开注册表异常','打开',0)
os._exit(0)
#如果打开则关闭
if key:
winreg.CloseKey(key)
#================================================================新建(修改)子键
winreg.CreateKey(winreg.HKEY_CURRENT_USER,r'software\dengpeiyou')
winreg.CreateKey(winreg.HKEY_CURRENT_USER,r'software\dengpeiyou\testa')
#添加键值
list_keys=[('aa1',winreg.REG_SZ,'a001'),('aa2',winreg.REG_DWORD,64),('aa3',winreg.REG_SZ,'99999')]
key_a=winreg.OpenKey(winreg.HKEY_CURRENT_USER,r'software\dengpeiyou\testa',0,winreg.KEY_SET_VALUE)
#建立1+3个键值
winreg.SetValueEx (key_a, "", 0, winreg.REG_SZ,'55555') #名称为空指定默认值
for i in range(len(list_keys)):
winreg.SetValueEx(key_a, list_keys[i][0], 0, list_keys[i][1], list_keys[i][2])
winreg.CreateKey(winreg.HKEY_CURRENT_USER,r'software\dengpeiyou\testb')
winreg.CreateKey(winreg.HKEY_CURRENT_USER,r'software\dengpeiyou\testc')
winreg.CloseKey(key_a)
#=================================================================读取子值
key_a=winreg.OpenKey(winreg.HKEY_CURRENT_USER,r'software\dengpeiyou\testa',0,winreg.KEY_QUERY_VALUE)
#遍历方法一
#项数
countkey=winreg.QueryInfoKey(key_a)[1] #返回元组(子值数,项数,长整数)
keylist=[]
for i in range(countkey):
name, key_value, value_type = winreg.EnumValue(key_a, i)
keylist.append((name,key_value,value_type))
print(keylist)
#另一种遍历方法
try:
i = 0
while True:
name, value, value_type = winreg.EnumValue(key_a, i)
i += 1
print("项名:%5s 值:%5s 类型:%1d" % (name, value, value_type))
except Exception as e:
pass
#print('查找完了')
winreg.CloseKey(key_a)
#==================================================================删除值和子键
key_name=r'software\dengpeiyou\testa'
key=winreg.OpenKey(winreg.HKEY_CURRENT_USER,key_name,0,winreg.KEY_SET_VALUE)
#这句正确执行的前提是前面打开时加winreg.KEY_SET_VALUE参数,否则报错无法执行
winreg.SetValueEx(key, "aa3", 0, winreg.REG_SZ,'123456') #修改一个存在的项值(如果不存在则新建)
try:
winreg.DeleteValue(key,"aa1") #而删除值项相对简单
except FileNotFoundError:
ctypes.windll.user32.MessageBoxW(None,'要删除的值不存在','提示',16)
winreg.CloseKey(key)
#技术含量最大的一个函数,可以递归删除所有子键和值(包括自身),请慎用!!!
def find_key(key_str):
try:
key=winreg.OpenKey(winreg.HKEY_CURRENT_USER,key_str)
except FileNotFoundError:
ctypes.windll.user32.MessageBoxW(None,'打开注册表异常','提示',16)
return
countkey=winreg.QueryInfoKey(key)[0] #子键数
#print("%s有%d个子键."%(key_str,countkey))
if countkey!=0:
for i in range(countkey-1,-1,-1):
key_name=winreg.EnumKey(key,i) #取键名
find_key(key_str+"\\"+key_name)
try:
winreg.DeleteKey(winreg.HKEY_CURRENT_USER, key_str)
except FileNotFoundError:
pass
str1=r'software\dengpeiyou'
#find_key(str1)
winreg操作windows注册表详解示例的更多相关文章
- [转帖]Windows注册表内容详解
Windows注册表内容详解 来源:http://blog.sina.com.cn/s/blog_4d41e2690100q33v.html 对 windows注册表一知半解 不是很清晰 这里学习一下 ...
- Windows注册表内容详解
Windows注册表内容详解 http://blog.sina.com.cn/s/blog_4d41e2690100q33v.html (2011-04-05 10:46:17) 第一课 注册表 ...
- 详解Windows注册表分析取证
大多数都知道windows系统中有个叫注册表的东西,但却很少有人会去深入的了解它的作用以及如何对它进行操作.然而对于计算机取证人员来说注册表无疑是块巨大的宝藏.通过注册表取证人员能分析出系统发生了什么 ...
- Windows注册表内容详解(转载)
(关于windows注册表的整理,来源网络) 前提 一.什么是注册表 注册表是windows操作系统.硬件设备以及客户应用程序得以正常运行和保存设置的核心"数据库",也可以说是 ...
- Windows 注册表常用操作
1 添加一个主键(比如在HKEY_LOCAL_MACHINE\SOFTWARE\中添加一个ABCEDFGHIJKLMN主键) Windows Registry Editor Version 5.00 ...
- Python调用windows下DLL详解
Python调用windows下DLL详解 - ctypes库的使用 2014年09月05日 16:05:44 阅读数:6942 在python中某些时候需要C做效率上的补充,在实际应用中,需要做部分 ...
- C#操作SQLite方法实例详解
用 C# 访问 SQLite 入门(1) CC++C#SQLiteFirefox 用 C# 访问 SQLite 入门 (1) SQLite 在 VS C# 环境下的开发,网上已经有很多教程.我也是从 ...
- redis.windows.conf配置详解
redis.windows.conf配置详解 转自:https://www.cnblogs.com/kreo/p/4423362.html # redis 配置文件示例 # 当你需要为某个配置项指定内 ...
- 使用Java修改Windows注册表
使用Java修改Windows注册表,使用最基本的就是cmd命令. 事例和运行结果如下所示: package day01; import java.io.IOException; /* 1,reg a ...
随机推荐
- Python练习九
1.处理文件,用户指定要查找的文件和内容,将文件中包含要查找内容的每一行都输出到屏幕. def check_file(filename, content): with open(filename, e ...
- 2016第七届蓝桥杯C/C++语言A组
一:问题: 某君新认识一网友.当问及年龄时,他的网友说:“我的年龄是个2位数,我比儿子大27岁,如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄” 请你计算:网友的年龄一共有多少种可能情况? 提 ...
- Spark源码系列:RDD repartition、coalesce 对比
在上一篇文章中 Spark源码系列:DataFrame repartition.coalesce 对比 对DataFrame的repartition.coalesce进行了对比,在这篇文章中,将会对R ...
- windows7 64位系统安装CPU版本TensorFlow(anaconda3.6)
1>下载anaconda3.6,https://www.anaconda.com/download/,选择64位的anaconda3.6,安装时候,路径可以自定义,但是要选择把路径添加到环境变量 ...
- 芯灵思Sinlinx A33开发板boa与CGI移植
开发平台 * 芯灵思SinlinxA33开发板 淘宝店铺: https://sinlinx.taobao.com/ 嵌入式linux 开发板交流 641395230 在嵌入式设备的管理与交互中,基于W ...
- zabbix安装源
使用zabbix安装源可以避免版本不同的问题,自己根据自己的需求选择对应的版本即可 http://repo.zabbix.com/zabbix/
- python2和3的区别
一.默认编码 2:ascii 3:utf-8 二.数字 python3无long
- char* 与 string 互转
因为c#强调安全性,每次意图将string的地址赋给指针时,系统都要报错,原因是系统无法计算字符串的空间和地址,这里不多bb,使用IntPtr类(using Runtime.InteropServic ...
- 记一次node进程无法kill 问题
起因 开发反馈测试环境某 node 进程使用 pm2 log 查看日志提示端口冲突,pm2 restart 重启进程问题依旧,但该服务可正常访问. 处理过程: 访问该服务 URL 业务正常,查看 Ng ...
- php在laravel中使用自定义的Common类
众所周知,laravel是一款高度集成的开发框架,框架内置非常多的操作方法,从而保证了我们的开发效率.但是在日常中为了满足我们的个性化业务,也需要自己去编写工具类,在laravel中我们完成编写后还需 ...