循环遍历值或注册表项.. _winreg Python

Zac*_*own 8 python windows registry enumeration winreg

我将如何通过循环所有使用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
Run Code Online (Sandbox Code Playgroud)

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

Ver*_*Ray 9

我宁愿避免错误而不是潜入它......

使用_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)
Run Code Online (Sandbox Code Playgroud)

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

for i in xrange(0, _winreg.QueryInfoKey(key)[0]):
    print _winreg.EnumKey(key, i)
Run Code Online (Sandbox Code Playgroud)

注意:使用import而不是from ... import使函数和变量来自何处.在以后的生活中更容易遵循代码.

  • xrange中的`-1`省略了最后一个键.我认为它应该只是`for x in xrange(_winreg.QueryInfoKey(key)[0]): (2认同)

pyf*_*unc 5

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
Run Code Online (Sandbox Code Playgroud)