#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注册表详解示例的更多相关文章

  1. [转帖]Windows注册表内容详解

    Windows注册表内容详解 来源:http://blog.sina.com.cn/s/blog_4d41e2690100q33v.html 对 windows注册表一知半解 不是很清晰 这里学习一下 ...

  2. Windows注册表内容详解

    Windows注册表内容详解 http://blog.sina.com.cn/s/blog_4d41e2690100q33v.html (2011-04-05 10:46:17)   第一课  注册表 ...

  3. 详解Windows注册表分析取证

    大多数都知道windows系统中有个叫注册表的东西,但却很少有人会去深入的了解它的作用以及如何对它进行操作.然而对于计算机取证人员来说注册表无疑是块巨大的宝藏.通过注册表取证人员能分析出系统发生了什么 ...

  4. Windows注册表内容详解(转载)

    (关于windows注册表的整理,来源网络) 前提 一.什么是注册表 ​ 注册表是windows操作系统.硬件设备以及客户应用程序得以正常运行和保存设置的核心"数据库",也可以说是 ...

  5. Windows 注册表常用操作

    1 添加一个主键(比如在HKEY_LOCAL_MACHINE\SOFTWARE\中添加一个ABCEDFGHIJKLMN主键) Windows Registry Editor Version 5.00 ...

  6. Python调用windows下DLL详解

    Python调用windows下DLL详解 - ctypes库的使用 2014年09月05日 16:05:44 阅读数:6942 在python中某些时候需要C做效率上的补充,在实际应用中,需要做部分 ...

  7. C#操作SQLite方法实例详解

    用 C# 访问 SQLite 入门(1) CC++C#SQLiteFirefox  用 C# 访问 SQLite 入门 (1) SQLite 在 VS C# 环境下的开发,网上已经有很多教程.我也是从 ...

  8. redis.windows.conf配置详解

    redis.windows.conf配置详解 转自:https://www.cnblogs.com/kreo/p/4423362.html # redis 配置文件示例 # 当你需要为某个配置项指定内 ...

  9. 使用Java修改Windows注册表

    使用Java修改Windows注册表,使用最基本的就是cmd命令. 事例和运行结果如下所示: package day01; import java.io.IOException; /* 1,reg a ...

随机推荐

  1. sklearn learn preprocessing

    train_test_split sklearn.model_selection.train_test_split(*arrays, test_size(float,int/None),#defaul ...

  2. Ubuntu 终端使用ss代理

    用polipo软件,这个软件可以吧socket5转换成http代理 $ sudo apt-get install polipo $ sudo vim /etc/polipo/config 在文件中加入 ...

  3. ecs

    第一章弹性计算服务ecs概述 1.什么是弹性计算服务ecs 2弹性计算服务ecs的特点 3.弹性计算服务ecs的应用场景 slb------ecs----ecs----------- rds      ...

  4. 动画讲解TCP的3次握手,4次挥手

    https://mp.weixin.qq.com/s/TUBhH_lJe6M4KgAZO-rP2A TCP三次握手和四次挥手的问题在面试中是最为常见的考点之一.很多读者都知道三次和四次,但是如果问深入 ...

  5. Java面向对象程序设计的六大基本原则

    1.开闭原则(Open Close Principle) 定义:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 开放-封闭原则的意思就是说,你设计的时候,时刻要考虑,尽量让这个类是足够好,写 ...

  6. Java ConcurrentHashMap存入引用对象时也是线程安全的

    本人小白,看到资料说ConcurrentHashMap是线程安全的,get过程不需要加锁,put是线程安全的,推荐高并发时使用.但是本人不清楚是否该map中存入的引用类型对象,对象属性变化也是否线程安 ...

  7. SqlServer :实现树形结构递归查询(无限极分类)

    SQL Server 2005开始,我们可以直接通过CTE来支持递归查询,CTE即公用表表达式 公用表表达式(CTE),是一个在查询中定义的临时命名结果集将在from子句中使用它.每个CTE仅被定义一 ...

  8. maven:Fatal error compiling: 无效的目标 发行版: 1.8 -> [Help 1]

    https://blog.csdn.net/kkgbn/article/details/72777750

  9. node.js 远程调试debug产线环境代码

    一.背景: 产线机器出bug,不能重启服务,需要保留现场,问题不好排查,只能靠远程debug. 二.实现步骤 1. 登录远程机器执行如下命令,nodePid为node服务的pid kill -usr1 ...

  10. 错误界面 SQL2008备份集中的数据库备份与现有的数据库不同,错误号码:3154。

    转载来源  https://blog.csdn.net/zaocha321/article/details/8466735 因为我也用这个方法成功了.所以记录下来 错误界面 SQL2005备份集中的数 ...