1. 程式人生 > >winreg操作windows註冊表詳解示例

winreg操作windows註冊表詳解示例

types def set 查找 無法執行 指定 tr1 參數 添加

技術分享圖片

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