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註冊表詳解示例