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 @ 2022-05-28 10:56  形同陌路love  阅读(346)  评论(0)    收藏  举报