import win32api import win32con def regquerysubkeys(handle, key, keylist = []): """ This function returns a recursively generated list of subkeys of a given key in deletable order, see win32api.RegDeleteKey. If an unexpected Exception occurs, it is raised! Parameters handle: one of the constants from win32con (e.g. win32con.HKEY_CURRENT_USER) key: a subkey within the handle as a string keylist: may be left empty, this is just neede for the recursion Returns keylist: a list with subkeys in deleteable order Sample call regquerysubkeys(win32con.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\") """ #get registry handle reghandle = win32api.RegOpenKeyEx(handle, key, 0, win32con.KEY_READ) try: i = 0 #enumerates subkeys and recursively calls this function again while True: subkey = win32api.RegEnumKey(reghandle, i) i += 1 #braintwister here ;-) regquerysubkeys(handle, key + subkey + "\\", keylist) except win32api.error as ex: #If no more subkeys can be found, we can append ourself if ex[0] == 259: keylist.append(key) #unexpected exception is raised else: raise finally: #do some cleanup and close the handle win32api.RegCloseKey(reghandle) #returns the generated list return keylist