python遍历注册表中某值下各项内容
需要import win32api 和 win32con
win32api的装载可参见
[https://blog.csdn.net/weixin_45903952/article/details/104054008]
定义了一个reglist函数并迭代,函数的参数为要遍历的路径和层次,层次为显示子项缩进制表位
其中print 的item为键值的元组数据,只用了每个元组的第1个元素:子键名称。即item[0]
#coding=gbk
import win32api
import win32con
reg_root = win32con.HKEY_CURRENT_USER
reg_path = r'Software\Microsoft\Windows\CurrentVersion\Applets'
reg_flags = win32con.WRITE_OWNER|win32con.KEY_WOW64_64KEY|win32con.KEY_ALL_ACCESS
#遍历枚举子键
def reglist(reg_path1,n):
key = win32api.RegOpenKeyEx(reg_root, reg_path1, 0, reg_flags)
print (reg_path1 ,"有子项",(win32api.RegQueryInfoKey(key))[0],"个")
for item in win32api.RegEnumKeyEx(key):
print("\t"*n,item[0])
if (win32api.RegQueryInfoKey(key))[0] >=1:
reg_path2=reg_path1+ "\\"+str(item[0])
#print (reg_path2)
n=n+1
reglist(reg_path2,n)
else:
pass
n=n-1
n=1
reglist (reg_path,n)
#关闭键
key = win32api.RegOpenKeyEx(reg_root, reg_path, 0, reg_flags)
win32api.RegCloseKey(key)
示例为HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets中各值
运行结果:如下
获得键后,
可用win32api.RegEnumKey(key,序号)获取键值名称,注意,序号是从0开始
可以用win32api.RegSetValueEx修改
win32api.RegSetValueEx(key,keyname,0,win32con.REG_SZ,keyvalue)
方法各个参数分别是 键、值的名称、0、值的类型、值的数值。
对于已存在的值的类型、数值可以通过regedit中查看
用win32api.RegDeleteKey
win32api.RegDeleteKey(key,keyname)
各个参数分别是 键、值的名称
另一个删除新项的代码
#coding=gbk
import win32api
import win32con
# 打开项
key = win32api.RegOpenKey(win32con.HKEY_CURRENT_USER,
'Software\Microsoft\Windows\CurrentVersion\Applets',0, win32con.KEY_ALL_ACCESS)
chuan=input ("自定义删除表项中一致性字符串,默认为'新项 #': ")
if chuan=="":
chuan="新项 #"
lenchuan=len(chuan)
#print (chuan,len(chuan))
keysb1=(win32api.RegQueryInfoKey(key))[0] # RegQueryInfoKey函数查询项的基本信息
#(26, 7, 128178812229687500L) # 返回项的子项数目、项值数目,以及最后一次修改时间
result = False
print ("注册表中共有",keysb1,"个子项")
#print(win32api.RegEnumKey(key,0))
for i in range(keysb1,0,-1):
#若不进行try操作,如果test不存在的话会有异常
try:
if win32api.RegEnumKey(key,i-1) != '123465':
print("第",i,"个子项,名称:",win32api.RegEnumKey(key,i-1),end="")
#print(win32api.RegEnumKey(key,i)[0:lenchuan])
if (win32api.RegEnumKey(key,i-1)[0:lenchuan]) == chuan:
print ("此项被删除!!",end="")
win32api.RegDeleteKey(key,win32api.RegEnumKey(key,i-1))
print ()
pass
else:
result = True
break
except:
pass #
keysb1=(win32api.RegQueryInfoKey(key))[0]
print ("\n操作后子项列表如下:")
for i in range(keysb1,0,-1):
print("第",i,"个子项,名称:",win32api.RegEnumKey(key,i-1))