python遍历注册表中某值下各项

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))

发布了7 篇原创文章 · 获赞 0 · 访问量 222

猜你喜欢

转载自blog.csdn.net/weixin_45903952/article/details/104062980
今日推荐