10

如何使用 Python 模块 _winreg 遍历 Windows 注册表项的所有。我有代码可以做我想做的事,但它是针对指定注册表项的子项的。


这是代码:

from _winreg import *
t = OpenKey(HKEY_CURRENT_USER, r"PATH TO KEY", 0, KEY_ALL_ACCESS)

try:
    i = 0
    while True:
        subkey = EnumValue(t, i)
        print subkey
        i += 1
except WindowsError:
    # WindowsError: [Errno 259] No more data is available    
    pass

哦,想通了。但是,如果有人知道另一种方法,我仍然会接受这个答案!

4

5 回答 5

10

我宁愿避免错误而不是直接进入它......

使用_winreg.QueryInfoKey获取值的数量:

import _winreg
key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, r'PATH\TO\KEY', 0, _winreg.KEY_READ)

for i in xrange(0, _winreg.QueryInfoKey(key)[1]):
    print _winreg.EnumValue(key, i)

要获得 Keys 的数量,方法相同,索引不同(原始问题的后半部分):

for i in xrange(0, _winreg.QueryInfoKey(key)[0]):
    print _winreg.EnumKey(key, i)

注意:使用import而不是from ... import明确说明函数和变量的来源。使以后的生活更容易遵循代码。

于 2013-07-10T06:05:08.397 回答
7

EnumValue 在这里不应该有帮助吗

# list all values for a key
try:
    count = 0
    while 1:
        name, value, type = _winreg.EnumValue(t, count)
        print repr(name),
        count = count + 1
except WindowsError:
    pass
于 2010-10-20T01:13:24.867 回答
2

对于蟒蛇 3

import winreg
hKey = winreg.OpenKey(winreg.HKEY_CLASSES_ROOT, "Local Settings\\Software\\Microsoft\\Windows\\Shell\\MuiCache")


try:
    count = 0
    while 1:
        name, value, type = winreg.EnumValue(hKey, count)
        print (name),
        count = count + 1
except WindowsError as err:
    print(err)
    pass
于 2018-11-08T07:23:28.330 回答
0

要遍历注册表的键和值,您需要模块中EnumKey()EnumValue()方法。_winreg请注意,这两种方法都将索引作为参数,并且只会为您提供给定索引的键(或值)。因此,为了获取所有键(或值),您需要将索引加一并继续直到WindowsError没有遇到。

这篇文章可能会帮助您对此进行详细了解。代码的 Github 链接可以在帖子中找到。

于 2016-09-12T12:57:48.060 回答
0

(Python3)使用生成器和递归,因为我不喜欢计数器......

 def get_keys(self, path, i=0):
    try:
        yield winreg.EnumValue(winreg.OpenKey(winreg.HKEY_CURRENT_USER, path), i)
        yield from get_keys(path, i+1)
    except WindowsError as err:
        pass


for name, value, type in r.get_keys(r"Local Settings\Software\Microsoft\Windows\Shell\MuiCache"):
    print(f"{name} => {value} ({type})"
于 2019-12-03T22:18:43.410 回答