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相关模块,需要实现上述功能可以使用该方法。