1. 程式人生 > 其它 >Windows獲取本機的安裝所有應用

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