Циклические значения или ключ реестра. _Winreg Python - PullRequest
7 голосов
/ 20 октября 2010

Как бы я перебрал все значения ключа реестра Windows, используя модуль Python _winreg.У меня есть код, который будет делать то, что я хочу, но это для подразделов указанного ключа реестра.


Вот код:

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 ]

8 голосов
/ 10 июля 2013

Я предпочитаю избегать ошибки, а не погружаться прямо в нее ...

Используйте _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)

Чтобы получить количество ключей, тот же метод, другой индекс (вторая половина исходного вопроса):

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

Примечание: используйте import вместо from ... import чтобы было ясно, откуда берутся функции и переменные.Позволяет легче следовать коду позже в жизни.

5 голосов
/ 20 октября 2010

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
0 голосов
/ 08 ноября 2018

для питона 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
0 голосов
/ 12 сентября 2016

Для перебора ключей и значений реестра вам потребуется метод EnumKey() и EnumValue() из модуля _winreg. Обратите внимание, что эти два метода принимают индекс в качестве аргумента и предоставят вам ключ (или значение) только для данного индекса. Поэтому, чтобы получить все ключи (или значения), вам нужно увеличить индекс на единицу и продолжать до тех пор, пока WindowsError не встретится.

Этот пост может помочь вам для более подробного понимания того же. Ссылка на код Github находится в сообщении.

...