2010-10-20 33 views
6

Comment puis-je boucle à travers toutes les les valeurs d'une clé de registre de Windows en utilisant le module Python _winreg. J'ai du code qui fera ce que je veux, mais c'est pour les sous-clés de la clé de registre spécifiée.en boucle par des valeurs ou clé de Registre .. _winreg Python


Voici le 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. Mais, si quelqu'un sait d'une autre façon de le faire, je vais toujours accepter cette réponse!

Répondre

4

Ne devrait pas EnumValue être utile ici

# 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

Je préfère éviter l'erreur au lieu de plonger en plein dedans ...

Utilisez _winreg.QueryInfoKey pour obtenir le nombre de valeurs:

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) 

Pour obtenir le nombre de clés, même méthode, index différent (deuxième moitié de la question originale):

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

Note: utilisation import au lieu de from ... import pour le rendre explicite où les fonctions et les variables viennent. Facilite le suivi du code plus tard dans la vie.

+2

le '-1' dans xrange supprime la dernière clé. Je pense qu'il devrait simplement être 'for i in xrange (_winreg.QueryInfoKey (key) [0]):' –

0

Pour l'itération à l'aide des clés et des valeurs de registre, vous devez utiliser la méthode EnumKey() et EnumVlaue() du module _winreg. Notez que ces deux méthodes prennent l'index comme argument et vous fourniront la clé (ou la valeur) uniquement pour l'index donné. Par conséquent, pour obtenir toutes les clés (ou valeurs), vous devez incrémenter l'index de un et continuer jusqu'à ce que WindowsError n'ait pas été rencontré.

This post peut vous aider pour une compréhension détaillée sur le même. Le lien Github pour le code peut être trouvé dans le message.