Windows獲取本機的安裝所有應用
阿新 • • 發佈:2022-05-28
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))