Loop through values or registry key.. _winreg Python

Zac Brown picture Zac Brown · Oct 20, 2010 · Viewed 13k times · Source

How would I loop through all the values of a Windows Registry Key using the Python module _winreg. I have code that will do what I want, but it is for the subkeys of the specified registry key.


Here Is The Code:

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

Oh, figured it out. But, if anyone knows of another way to do it, I'll still accept that answer!

Answer

VertigoRay picture VertigoRay · Jul 10, 2013

I prefer to avoid the error instead of diving right into it ...

Use _winreg.QueryInfoKey to get the number of values:

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)

To get the number of Keys, same method, different index (second half of original question):

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

Note: use import instead of from ... import to make it explicit where functions and variables are coming from. Makes it easier to follow code later in life.