gpt4 book ai didi

Python - Winreg 获取键值

转载 作者:行者123 更新时间:2023-12-01 04:32:38 25 4
gpt4 key购买 nike

我正在尝试在 Python 中使用 WinReg,但遇到了障碍。下面的代码应该返回一个字典,每个返回的条目都有一个键:值,我发现自己得到了相同的键:值。

如何编辑此代码以获得一个或多个不同的值?

import _winreg
def subkeys(key):
i = 0
while True:
try:
subkey = _winreg.EnumKey(key, i)
yield subkey
i+=1
except WindowsError as e:
break

def traverse_registry_tree(hkey, keypath, tabs=0):
reg_dict = {}
key = _winreg.OpenKey(hkey, keypath, 0, _winreg.KEY_READ)
for subkeyname in subkeys(key):
reg_dict[subkeyname] = subkeyname
return reg_dict

keypath = r"SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall"

print traverse_registry_tree(_winreg.HKEY_LOCAL_MACHINE, keypath)

输出与此类似:

{'Mozilla Firefox 40.0.2 (x86 en-US)': 'Mozilla Firefox 40.0.2 (x86 en-US)', 'IE40': 'IE40', 'Connection Manager': 'Connection Manager'}

任何帮助将不胜感激,请记住我无论如何都不是高级Python专家。

最佳答案

每次递归到 traverse_registry_tree 函数时,都会创建一个新字典。因此,每本字典中都只有一个键。

您可以看出这是错误的,因为在递归调用中您没有对返回值执行任何操作:外部调用打印返回值,但内部调用则不会。

您可以通过将递归调用的返回值打包回您正在创建的字典中来解决此问题。但这并不像将整个字典传入和传出递归调用那么有效:

def traverse_registry_tree(hkey, keypath, reg_dict):
key = _winreg.OpenKey(hkey, keypath, 0, _winreg.KEY_READ)
reg_dict[keypath] = key
for subkey in subkeys(key):
subkeypath = "%s\\%s" % (keypath, subkey)
traverse_registry_tree(hkey, subkeypath, reg_dict)

reg_dict = {}
keypath = r"SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall"
traverse_registry_tree(_winreg.HKEY_LOCAL_MACHINE, keypath, reg_dict)

print(reg_dict)

不确定您是否还询问如何访问注册表值(以及 key )?如果是这样,这里也有一些代码可以做到这一点:

def get_values(key):
key_dict = {}
i = 0
while True:
try:
subvalue = _winreg.EnumValue(key, i)
except WindowsError as e:
break
key_dict[subvalue[0]] = subvalue[1:]
i+=1
return key_dict

def traverse_registry_tree(hkey, keypath, reg_dict):
key = _winreg.OpenKey(hkey, keypath, 0, _winreg.KEY_READ)
reg_dict[keypath] = get_values(key)
for subkey in subkeys(key):
subkeypath = "%s\\%s" % (keypath, subkey)
traverse_registry_tree(hkey, subkeypath, reg_dict)

关于Python - Winreg 获取键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32171448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com