用Python获取Windows本机安装的所有应用程序的实现与分析

本文主要是介绍用Python获取Windows本机安装的所有应用程序的实现与分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一个项目中需要获取本机安装的所有应用程序列表,花了一点时间研究了一下,分享出来。
主要通过访问注册表和桌面快捷方式来完成这一任务,因为注册表中获取到的应用程序列表不完全,因此通过桌面快捷方式进行补充。

导入所需模块
import winreg
import win32com.client
from pathlib import Path
  • winreg:用于访问Windows注册表。
  • win32com.client:用于处理Windows快捷方式。
  • Path:用于处理文件和目录路径。
通过注册表获取安装的应用程序
def get_installed_apps_from_registry():"""通过注册表查询安装的应用"""apps = {}try:# 定义要查询的注册表路径reg_paths = [r"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall",r"SOFTWARE\\WOW6432NODE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"]# 遍历所有注册表路径for reg_path in reg_paths:with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, reg_path) as key:for i in range(winreg.QueryInfoKey(key)[0]):sub_key_name = winreg.EnumKey(key, i)with winreg.OpenKey(key, sub_key_name) as sub_key:try:app_name = winreg.QueryValueEx(sub_key, "DisplayName")[0]# 排除驱动程序if "驱动程序" in app_name:continueapp_path = winreg.QueryValueEx(sub_key, "DisplayIcon")[0]# 对 exe 路径进行过滤和清洗if "exe" in app_path:app_path = app_path.replace('"', '')# 有一些 exe 文件的路径是以逗号分隔的,只取第一个app_path = app_path.split(",")[0]apps[app_name] = {"path": app_path}except FileNotFoundError:passexcept Exception as e:print(f"Error: {e}")return apps

此函数执行以下操作:

  1. 定义注册表中存储已安装应用程序信息的路径。
  2. 遍历这些路径,并获取每个应用程序的名称和可执行文件路径。
  3. 过滤掉包含“驱动程序”的应用名称,清洗路径信息,构建应用程序字典。
获取桌面上的快捷方式
def get_shortcuts_on_desktop():"""查询桌面上安装的应用程序快捷方式"""desktop_path = Path.home() / "Desktop"shortcuts = {}for item in desktop_path.iterdir():if item.suffix == ".lnk":shortcut_name = item.stemshortcuts[shortcut_name] = {"path": item}return shortcuts

此函数执行以下操作:

  1. 获取桌面目录路径。
  2. 遍历桌面上的所有文件,筛选出扩展名为.lnk(快捷方式)的文件,并保存其路径和名称。
根据快捷方式获取目标路径
def get_target_path_by_shortcut(shortcut_path):"""根据快捷方式获取应用程序的可执行文件(exe)路径:param shortcut_path: 快捷方式路径:return: 可执行文件(exe)路径"""shell = win32com.client.Dispatch("WScript.Shell")shortcut = shell.CreateShortcut(shortcut_path)target_path = shortcut.TargetPathreturn target_path

此函数执行以下操作:

  1. 使用win32com.client模块来解析快捷方式。
  2. 获取快捷方式所指向的目标路径,即应用程序的可执行文件路径。
合并注册表和桌面快捷方式的信息
def get_installed_apps_dict():"""获取本机安装的所有应用程序:return: 安装的应用程序字典"""installed_apps = get_installed_apps_from_registry()desktop_shortcuts = get_shortcuts_on_desktop()merged_apps = {}# 合并安装的应用程序和桌面快捷方式for app_name, app_info in installed_apps.items():merged_apps[app_name] = {"path": app_info["path"]}# 添加在桌面快捷方式中存在但未在安装应用程序中列出的软件for app_name, shortcut_info in desktop_shortcuts.items():if app_name not in installed_apps:shortcut_path = str(shortcut_info["path"])merged_apps[app_name] = {"path": get_target_path_by_shortcut(shortcut_path)}return merged_apps

此函数执行以下操作:

  1. 获取注册表中安装的应用程序和桌面上的快捷方式。
  2. 合并这两部分信息,确保所有应用程序都包含在结果中。
  3. 如果一个应用程序在桌面快捷方式中存在但未在注册表中列出,则从快捷方式获取其路径。
主程序入口
if __name__ == '__main__':app_list = get_installed_apps_dict()for name, info in app_list.items():print(f"App Name: {name}")print(f"Executable Path: {info['path']}")print()print(f"Total Apps: {len(app_list)}")

主程序入口执行以下操作:

  1. 获取所有安装的应用程序列表。
  2. 打印每个应用程序的名称和路径。
  3. 输出总的应用程序数量。

通过这些步骤,该脚本能够有效地获取并列出Windows系统中安装的所有应用程序。

这篇关于用Python获取Windows本机安装的所有应用程序的实现与分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1024453

相关文章

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

基于Python打造一个智能单词管理神器

《基于Python打造一个智能单词管理神器》这篇文章主要为大家详细介绍了如何使用Python打造一个智能单词管理神器,从查询到导出的一站式解决,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 项目概述:为什么需要这个工具2. 环境搭建与快速入门2.1 环境要求2.2 首次运行配置3. 核心功能使用指

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

利用Python打造一个Excel记账模板

《利用Python打造一个Excel记账模板》这篇文章主要为大家详细介绍了如何使用Python打造一个超实用的Excel记账模板,可以帮助大家高效管理财务,迈向财富自由之路,感兴趣的小伙伴快跟随小编一... 目录设置预算百分比超支标红预警记账模板功能介绍基础记账预算管理可视化分析摸鱼时间理财法碎片时间利用财

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

Win安装MySQL8全过程

《Win安装MySQL8全过程》:本文主要介绍Win安装MySQL8全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Win安装mysql81、下载MySQL2、解压文件3、新建文件夹data,用于保存数据库数据文件4、在mysql根目录下新建文件my.ini

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息