python获取本机的安装所有应用( Windows)

Windows获取本机的安装所有应用

采用操作注册表的方式,理论上其他可通过操作注册表方式的动作均可

import winreg

def get_window_software(hive, flag):
    """
    get windows all installed software
    """
    # winreg.ConnectRegistry(None, hive): 连接注册表; hive:windows下的HKEY_常量
    aReg = winreg.ConnectRegistry(None, hive)
    # winreg.OpenKey(reg, regedit_path, 0, reg_type):操作注册表(读取,写入等)
    # reg: 连接的注册表; regedit_path:注册表的路径; reg_type:需要对注册表的操作类型
    aKey = winreg.OpenKey(aReg, r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall",
                          0, winreg.KEY_READ | flag)
    # winreg.QueryInfoKey(key):获取注册表的相关信息; 返回一个元组:(此注册表的子key数量, 0, 自从1600.1.1上次修改时间(纳秒))key:打开的注册表
    count_subkey = winreg.QueryInfoKey(aKey)[0]
    print(f"count_subkey:{count_subkey}")
    software_list = []
    for i in range(count_subkey):
        software = {}
        try:
            asubkey_name = winreg.EnumKey(aKey, i)
            asubkey = winreg.OpenKey(aKey, asubkey_name)
            # 根据键名查询对应值
            software['name'] = winreg.QueryValueEx(asubkey, "DisplayName")[0]
            try:
                software['version'] = winreg.QueryValueEx(asubkey, "DisplayVersion")[0]
            except EnvironmentError:
                software['version'] = 'undefined'
            try:
                software['publisher'] = winreg.QueryValueEx(asubkey, "Publisher")[0]
            except EnvironmentError:
                software['publisher'] = 'undefined'
            software_list.append(software)
        except EnvironmentError:
            continue

    return software_list

if __name__ == "__main__":
    software_list = get_window_software(winreg.HKEY_LOCAL_MACHINE, winreg.KEY_WOW64_32KEY) + get_window_software(winreg.HKEY_LOCAL_MACHINE, winreg.KEY_WOW64_64KEY) + get_window_software(winreg.HKEY_CURRENT_USER, 0)
    print(software_list)
    for software in software_list:
        print('Name=%s, Version=%s, Publisher=%s' % (software['name'], software['version'], software['publisher']))
    print('Number of installed apps: %s' % len(software_list))
posted @   形同陌路love  阅读(282)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示