from winreg import * from contextlib import suppress import itertools def subkeys(path, hkey=HKEY_CLASSES_ROOT, flags=0): with suppress(WindowsError), OpenKey(hkey, path, 0, KEY_READ|flags) as k: for i in itertools.count(): yield EnumKey(k, i) def subvalues(path, hkey=HKEY_CLASSES_ROOT, flags=0): with suppress(WindowsError), OpenKey(hkey, path, 0, KEY_READ|flags) as k: for i in itertools.count(): yield EnumValue(k, i) for entry in subkeys(""): if "shell" not in list(subkeys(entry)): continue with suppress(WindowsError): key = OpenKey(HKEY_CLASSES_ROOT, f"{entry}\\shell\\open\\command") command = EnumValue(key, 0)[1] protocolEnabled = "URL Protocol" in (x[0] for x in subvalues(entry)) if protocolEnabled: print(f"{entry:38} : {command}")