2010-10-20 15 views
6

W jaki sposób przetestowałbym wszystkie wartości wartości klucza rejestru systemu Windows za pomocą modułu Python _winreg. Mam kod, który zrobi to, co chcę, ale jest dla podkluczy określonego klucza rejestru.Zapisywanie wartości lub klucza rejestru. _winreg Python


Oto kod:

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 

Och, zdobione. Ale jeśli ktoś wie o innym sposobie, to jeszcze zaakceptuję tę odpowiedź!

Odpowiedz

4

nie powinien EnumValue być pomocne tutaj

# 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 
7

Wolę uniknąć błędu zamiast nurkowania prawo w nim ...

Zastosowanie _winreg.QueryInfoKey aby uzyskać liczbę wartości:

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) 

Aby uzyskać liczbę kluczy, tę samą metodę, inny indeks (druga połowa pierwotnego pytania):

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

Uwaga: użycie import zamiast from ... import dokonać wyraźnego gdzie funkcje i zmienne pochodzą. Ułatwia śledzenie kodu w późniejszym życiu.

+2

'-1' w xrange wychodzi z ostatniego klawisza. Myślę, że powinno to być po prostu 'for i in xrange (_winreg.QueryInfoKey (key) [0]):' –

0

Do iteracji kluczy i wartości rejestru potrzebna jest metoda EnumKey() i EnumVlaue() z modułu _winreg. Zauważ, że te dwie metody przyjmują indeks jako argument i dostarczą ci klucz (lub wartość) tylko dla danego indeksu. Dlatego, aby uzyskać wszystkie klucze (lub wartości), należy zwiększyć indeks o jeden i kontynuować aż do momentu, gdy WindowsError nie napotka.

This post może pomóc w dokładniejszym zrozumieniu tego samego. Link do Githuba dla kodu można znaleźć w poście.

Powiązane problemy