9

以下のコードを使用して、Windows7のマシンレジストリハイブ「HKEY_LOCAL_MACHINE」から5つのサブキーを正常に取得できます。

from _winreg import *

try:
    i = 0
    while True:
        subkey = EnumKey(HKEY_LOCAL_MACHINE, i)
        print subkey
        i += 1
except WindowsError:
    pass

私の質問は、それらの下のキーをどのように列挙するのですか?SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ NetworkList \ Signatures \ Unmanagedフォルダーにすべてのキーを一覧表示したいのですが、そこに移動する方法がわかりません。

最初のコメントに応えて、私は自分のマシンでこのコードを実行しましたが、エラーは発生しませんでしたが、結果は生成されませんでした。

from _winreg import *

aReg = ConnectRegistry(None,HKEY_LOCAL_MACHINE)
aKey = OpenKey(aReg, r"SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\Unmanaged")
for i in range(1024):
    try:
        keyname = EnumKey(aKey, i)
        asubkey = OpenKey(aKey, keyname)
        val = QueryValueEx(asubkey, "Description")
        print val
    except WindowsError:
        break

regeditまたはregクエリは、そのフォルダーに6つの値を表示しますが、それらの6つを表示するPythonスクリプトを取得できません。

4

7 に答える 7

1

これは機能し、すべてのサブキーのリストを出力します(@Brosephの回答の修正版)

import _winreg

def subkeys(key):
    i = 0
    while True:
        try:
            subkey = _winreg.EnumKey(key, i)
            yield subkey
            i+=1
        except WindowsError as e:
            break

def traverse_registry_tree(hkey, keypath, tabs=0):
    key = _winreg.OpenKey(hkey, keypath, 0, _winreg.KEY_READ)
    for subkeyname in subkeys(key):
        print '\t'*tabs + subkeyname
        subkeypath = "%s\\%s" % (keypath, subkeyname)
        traverse_registry_tree(hkey, subkeypath, tabs+1)

keypath = r"SOFTWARE\\Microsoft\\Windows"

traverse_registry_tree(_winreg.HKEY_LOCAL_MACHINE, keypath)
于 2015-03-27T15:09:53.683 に答える