Вы можете использовать EnumKey
для получения вложенных ключей открытого ключа реестра.
winreg.EnumKey (ключ, индекс)
Перечисляетподразделы открытого ключа реестра, возвращающие строку.
ключ - это уже открытый ключ, или одна из предопределенных констант HKEY_ *.
index - это целое число, которое идентифицирует индекс ключа
from contextlib import suppress
from winreg import \
(OpenKey,
HKEY_LOCAL_MACHINE,
QueryInfoKey,
QueryValueEx,
EnumKey)
PROFILE_REGISTRY = "SOFTWARE\\Microsoft\\WindowsNT\\CurrentVersion\\ProfileList"
def get_profile_attribute(*, attribute):
profile_to_sub_key_map = {}
with OpenKey(HKEY_LOCAL_MACHINE, PROFILE_REGISTRY) as key:
number_of_sub_keys, _, _ = QueryInfoKey(key) # The `QueryInfoKey` Returns information about a key, as a tuple.
# At the index 0 will be An integer giving the number of sub keys
# this key has.
for index in range(number_of_sub_keys):
sub_key_name = EnumKey(key, index)
# Open the sub keys one by one and fetch the attribute.
with OpenKey(HKEY_LOCAL_MACHINE,
f"{PROFILE_REGISTRY}\\{sub_key_name}") as sub_key:
with suppress(FileNotFoundError):
registry_value, _ = QueryValueEx(sub_key, attribute)
profile_to_sub_key_map.update({sub_key_name: registry_value})
return profile_to_sub_key_map
print(get_profile_attribute(attribute='ProfileImagePath'))
Также обратите внимание, что согласно документации.
Объект HKEY
реализует __enter__()
и __exit__()
и, таким образом, поддерживает протокол контекста дляс оператором:
with OpenKey(HKEY_LOCAL_MACHINE, "foo") as key:
... # work with key
автоматически закроет клавишу, когда элемент управления выйдет из блока.