Итерация по указанному подразделу реестра - PullRequest
0 голосов
/ 17 декабря 2018

Я занимаюсь разработкой редактора реестра Windows на Python 3.

На данный момент моя функция для запроса ключа ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ в кусте CURRENT_USER выводит то, что я хочу, я хочу, чтобы пользователь указал, какойподключ, они хотят запросить, например, подраздел Python, и выполнить итерацию по нему, но не могут решить это.

Мой код пока:

def query_registry():
    registry_path = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER)
    registry_key = winreg.OpenKey(registry_path, r"SOFTWARE\\", 0, winreg.KEY_READ)

    for i in range(200):
        try:
            subkey_name = winreg.EnumKey(registry_key, i)
            print(i, "-", subkey_name)
        except:
            print("Number of Directories --> %s" %i + "\n")
            break

Вывод:

enter image description here

Любые предложения будут оценены.

1 Ответ

0 голосов
/ 19 декабря 2018

Сделайте функцию query_registry() более универсальной, чтобы вызывать себя рекурсивно, например, следующим образом (извините за слишком маленький код pythonish ):

def query_registry( sargpath, sargxst):
    print(sargpath)
    iargxst = int( sargxst)
    registry_path = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER)
    registry_key  = winreg.OpenKey(registry_path, sargpath, 0, winreg.KEY_READ)
    info_key      = winreg.QueryInfoKey(registry_key)
    if ( iargxst < 0 ):
        for i in range(info_key[0]):
            subkey_name = winreg.EnumKey(registry_key, i)
            print(i, "-", subkey_name)
        print("Number of Directories --> %s\n" %(info_key[0]))
        ###
        if ( info_key[0] > 0 ):
            x = input('Enter subkey number (-1 to end): ')
            if ( int(x) in range(info_key[0]) ):
                subkey_name = winreg.EnumKey(registry_key, int(x))
                query_registry( sargpath + '\\' + subkey_name , -1 )
            else:
                exit()
    else:
        subkey_name = winreg.EnumKey(registry_key, iargxst)
        query_registry( sargpath + '\\' + subkey_name ,-1 )

### main ###
import sys
import winreg
query_registry(sys.argv[1],sys.argv[2])

Пример результата:

==> D:\bat\SO\53808855.py "software" 19
software
software\Google
0 - Chrome
1 - Common
2 - Software Removal Tool
3 - Update
Number of Directories --> 4

Enter subkey number (-1 to end): 0
software\Google\Chrome
0 - BLBeacon
1 - BLFinchList
2 - BrowserCrashDumpAttempts
3 - BrowserExitCodes
4 - Extensions
5 - NativeMessagingHosts
6 - PreferenceMACs
7 - StabilityMetrics
8 - ThirdParty
Number of Directories --> 9

Enter subkey number (-1 to end): 6
software\Google\Chrome\PreferenceMACs
0 - Default
1 - Guest Profile
2 - Profile 2
3 - Profile 3
4 - System Profile
Number of Directories --> 5

Enter subkey number (-1 to end): -1

==>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...