2010-10-20 27 views
6

Làm cách nào để lặp qua tất cả các giá trị của Khóa đăng ký Windows bằng mô-đun Python _winreg. Tôi có mã sẽ làm những gì tôi muốn, nhưng nó là dành cho các khóa con của khóa registry được chỉ định.Lặp qua các giá trị hoặc khóa đăng ký .. _winreg Python


Đây là 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. Nhưng, nếu có ai biết cách khác để làm điều đó, tôi sẽ vẫn chấp nhận câu trả lời đó!

Trả lời

4

nên không EnumValue được giúp đỡ ở đây

# 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

Tôi thích tránh lỗi thay vì phải lặn vào nó ...

Sử dụng _winreg.QueryInfoKey để có được số lượng các giá trị:

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) 

Để lấy số lượng Keys, cùng một phương pháp, chỉ mục khác nhau (nửa thứ hai của câu hỏi gốc):

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

Lưu ý: sử dụng import thay vì from ... import để làm cho nó rõ ràng nơi các chức năng và các biến đang đến từ. Làm cho nó dễ dàng hơn để làm theo mã sau này trong cuộc sống.

+2

ký tự '-1' trong xrange sẽ thoát khỏi khóa cuối cùng. Tôi nghĩ rằng nó chỉ đơn giản là 'cho tôi trong xrange (_winreg.QueryInfoKey (khóa) [0]):' –

0

Để lặp qua khóa và giá trị của sổ đăng ký, bạn cần có phương thức EnumKey()EnumVlaue() từ mô-đun _winreg. Lưu ý rằng hai phương thức này, lấy chỉ mục làm đối số và sẽ cung cấp cho bạn khóa (hoặc giá trị) chỉ cho chỉ mục đã cho. Do đó, để có được tất cả các khóa (hoặc các giá trị), bạn cần tăng chỉ mục một và tiếp tục cho đến khi WindowsError không gặp phải.

This post có thể giúp bạn hiểu một cách chi tiết. Liên kết Github cho mã có thể được tìm thấy trong bài đăng.

Các vấn đề liên quan