当前位置: 首页 > news >正文

pywin32连接到WMI接口获取指定名称程序路径

  pywin32 提供的 ​WMI(Windows Management Instrumentation)接口​ 是一组允许开发者访问和管理 Windows 操作系统各种信息的工具和接口。WMI 是微软提供的一种技术,旨在简化和统一对系统管理任务的编程访问,如硬件监控、软件安装、进程管理、事件日志等。在本文,我们将通过wmi接口来 实现查找指定名称程序路径。

获取方式

pip install -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple pywin32

pywin32中的WMI 接口

  pywin32供了对 WMI 的全面封装,使 Python 开发者能够方便地访问和操作 WMI 提供的各种管理功能。主要通过win32com.client来实现。

  win32com.client主要用于 COM 对象的创建和管理,WMI 主要通过 COM 接口进行访问。

实现思路

        在这里我们可以先使用win32com.client.GetObject('winmgmts:')来创建一个WMI服务对象并通过其'Win32_Process'实例来连接到进程池,接着遍历进程池获取各个进程名称并将其名称与给定程序的名称对比即可,这个实现思路实际上与我之前发布的这篇文的章思路一致使用python获取指定名字的程序的文件路径_使用python 编写找到特定文件名的路径的程序-CSDN博客https://blog.csdn.net/weixin_73953650/article/details/144484344?spm=1001.2014.3001.5501

        唯一不同的地方是这里我们使用pywin32实现,倘若你的项目中需要调用windowsAPI包含了pywin32,且不想额外下载psuti库来l实现上述功能,可以使用该方法。

源代码

使用pywin32实现

import os
import win32clipboard
import win32com.client 
def find_process_path(exe_name:str,copy_to_clipboard:bool=True):
    '''该方法用来查找正在运行的名称为exe_name的程序的路径\n
        Args:
            exe_name:要查找的正在运行的进程的名称:比如Wechat.exe
            copy_to_clipboard:\t是否将查找到的程序路径复制到剪贴板\n
    '''
    wmi=win32com.client.GetObject('winmgmts:')
    processes = wmi.InstancesOf('Win32_Process')
    for process in processes:
        if process.Name.lower() == 'Wechat.exe'.lower():
            exe_path = process.ExecutablePath
            if exe_path:
                exe_path = os.path.abspath(exe_path)
    if exe_path:
        if copy_to_clipboard:
                win32clipboard.OpenClipboard()
                win32clipboard.EmptyClipboard()
                win32clipboard.SetClipboardText(exe_path)
                win32clipboard.CloseClipboard()
                print(f'已将{exe_name}路径复制到剪贴板')
        return exe_path
    return None
print(find_process_path('Wechat.exe',False))

说明

  1. wmi接口提供的进程池的每个进程的Name属性为其文件路径的小写名称,所以在代码中我们需要判断其与给定的exe文件名称的小写是否相等。

   2. 该方法与psutil在遍历进程池查找指定名称的程序路径思路一致。 若你只是想简单查找,那么使用psutil即可,无需下载pywin32,pywin32库相较于psutil体积大。若你的代码中用到了pywin32相关模块,需要实现上述功能可以使用该方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/48275.html

相关文章:

  • 【Java数据结构】哈希表
  • 【DOM 型 XSS举例】
  • 开放鸿蒙认证,OpenHarmony兼容性认证介绍
  • 2025统计建模大赛选题参考?
  • 算法系列之数据结构-二叉树
  • Blueprint —— Flow Control
  • C#中泛型的协变和逆变
  • 机器学习之集成学习思维导图
  • 【人工智能】Python中的迁移学习:使用预训练模型进行分类任务
  • 【前端】CSS 备忘清单(超级详细!)
  • 内核进程调度队列(linux的真实调度算法) ─── linux第13课
  • 【经验分享】Ubuntu vmware虚拟机存储空间越来越小问题(已解决)
  • Spring IoC配置(xml+组件类的生命周期方法)
  • 精准汇报:以明确答复助力高效工作
  • 网络原理----TCP/IP(3)
  • 解决:org.springframework.web.multipart.support.MissingServletRequestPartException
  • 小练习之配置本地yum源和ssh服务
  • Uniapp使用大疆SDK打包离线原生插件
  • Cherno C++ P61 C++当中的命名空间
  • K8S学习之基础五:k8s中node节点亲和性
  • Nginx1.19.2不适配OPENSSL3.0问题
  • DeepSeek 助力 Vue3 开发:打造丝滑的时间选择器(Time Picker)
  • 17.9 LangSmith Tracing 深度实战:构建透明可观测的大模型应用
  • 蓝桥杯刷题(Cows in a Skyscraper G,炮兵阵营)
  • ffmpeg源码编译支持cuda
  • STM32-GPIO详解
  • 主时钟与虚拟时钟约束
  • 【UCB CS 61B SP24】Lecture 19 20: Hashing Hashing II 学习笔记
  • YOLOv11融合YOLOv12中的R-ELAN结构
  • 通过continue插件实现vscode接入本地离线部署的deepseek