Python winreg通过子键循环

use*_*218 7 python winreg

我能够使用下面的代码从我的Windows 7机器注册表配置单元"HKEY_LOCAL_MACHINE"中成功检索5个子键.

from _winreg import *

try:
    i = 0
    while True:
        subkey = EnumKey(HKEY_LOCAL_MACHINE, i)
        print subkey
        i += 1
except WindowsError:
    pass
Run Code Online (Sandbox Code Playgroud)

我的问题是,我如何枚举那些键?我想最终列出SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\Unmanaged文件夹中的所有密钥,但我无法弄清楚如何走下去.

为了回应第一条评论,我在我的机器上运行了这段代码,虽然它没有出错,但它没有产生结果.

from _winreg import *

aReg = ConnectRegistry(None,HKEY_LOCAL_MACHINE)
aKey = OpenKey(aReg, r"SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\Unmanaged")
for i in range(1024):
    try:
        keyname = EnumKey(aKey, i)
        asubkey = OpenKey(aKey, keyname)
        val = QueryValueEx(asubkey, "Description")
        print val
    except WindowsError:
        break
Run Code Online (Sandbox Code Playgroud)

一个regedit或reg查询显示该文件夹中的6个值,但是我无法获得一个python脚本来向我显示这六个值.

小智 1

我没有相同的注册表项可供搜索,但以下代码将列出 HKEY_LOCAL_MACHINE\Software 中的所有子项。我认为如果您将 keyVal 字符串的值更改为您的目录,它就会起作用。

try ... except是这样的,因为 EnumKey 会失败。我没有将其作为 for 循环来执行,因为我不知道如何获得 aKey 的正确长度。

keyVal = r"Software"
aKey = OpenKey(HKEY_LOCAL_MACHINE, keyVal, 0, KEY_ALL_ACCESS)
try:
    i = 0
    while True:
        asubkey = EnumKey(aKey, i)
        print(asubkey)
        i += 1
except WindowsError:
    pass
Run Code Online (Sandbox Code Playgroud)