import winreg def enumerate_registry_values(key, sub_key): """ 枚举注册表键中的所有值 :param key_path: 注册表键路径 """ # key 可以是一个打开的key,或者winreg预定义的值HKEY_* constants try: reg_key = winreg.OpenKey(key, sub_key, 0, winreg.KEY_READ) except OSError: print(f"can't open key {key}/{sub_key}") return values = [] index = 0 while True: try: # 枚举值 value_name, value_data, value_type = winreg.EnumValue(reg_key, index) values.append((value_name, value_data, value_type)) index += 1 except OSError: # 当没有更多值时跳出循环 break winreg.CloseKey(key) print(f"枚举值成功 - 路径: {key}{sub_key}, 值数量: {len(values)}") for name, data, type_ in values: print(f" 名称: {name}, 值: {data}, 类型: {type_}") print("基于注册表查看用户环境变量") # 查看用户定义的环境变量路径是:HKEY_CURRENT_USER\Environment enumerate_registry_values(winreg.HKEY_CURRENT_USER,"Environment") # 堆代码 duidaima.com def get_children_key_names(key, sub_key): """ 获取key的子节点的key 并且以数组返回 """ # key 可以是一个打开的key,或者winreg预定义的值HKEY_* constants reg_key = winreg.OpenKey(key, sub_key, 0, winreg.KEY_READ) sub_key_names = [] index = 0 while True: try: # 枚举值 sub_key_name = winreg.EnumKey(reg_key, index) sub_key_names.append(sub_key_name) index += 1 except OSError: # 当没有更多值时跳出循环 break winreg.CloseKey(key) return sub_key_names print("基于注册表查看对文件夹右键菜单的操作") # 遍历路径:\HKEY_CLASSES_ROOT\Directory\Background\shell,查看针对文件夹中空白处右键菜单的操作 sub_key_names=get_children_key_names(winreg.HKEY_CLASSES_ROOT,r"Directory\Background\shell") for sub_key_name in sub_key_names: # 菜单的操作在command的值中 enumerate_registry_values(winreg.HKEY_CLASSES_ROOT,r'Directory\Background\shell\\'+""+sub_key_name+r"\command")
输出如下: