WindowsProtocolViewer/enumerate.py

24 lines
857 B
Python

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}")