一、前言
在连接windows
窗口的时候,有些同学会遇到一个应用但是打开了几个不同的进程窗口,但是在AirtestIDE搜索窗口只有一个或寻找窗口名称都是统一名称的时候,又应该如何处理呢?那么今天我们一起来探讨下这个问题吧~
二、获取windows应用进程相关信息方式
在需要获取windows
应用进程的相关信息,我们需要确保我们的python
环境中含有下面几种库,建议在本地的python
环境中进行修改,并将AirtestIDE
的python
环境更换为本地的python
环境。
pip install psutil
pip install pywinauto
2.1 获取windows所有进程
可以获取本地计算机上所有正在运行的进程的类实例,并返回一个迭代器,我们可以将我们需要查询的指定参数传入括号内,会以字典的形式去创建一份进程表。
for proc in psutil.process_iter(['pid', 'name', 'create_time']):
print(proc.info)
2.2 获取进程异常类
有三种不同的获取进程的异常类,我们可以通过异常处理进行跳过或输出报错等。
#当在当前进程列表中找不到具有给定 pid的进程时,或者当进程不再存在时,由类方法引发。
psutil.NoSuchProcess(pid, name=None, msg=None)
#当由于权限不足而拒绝执行操作的权限时, 由类方法引发。
psutil.AccessDenied(pid=None, name=None, msg=None)
#如果超时并且进程仍然存在,则通过方法引发。
psutil.TimeoutExpired(seconds, pid=None, name=None, msg=None)
2.3 判断进程是否有界面
可以通过使用pywinauto
库下的 findwindows.find_window(process=pid)
获取窗口句柄去进行判断,当获取的窗口句柄长度大于0时,则证明该进程有界面。
def has_gui(pid):
try:
windows = findwindows.find_windows(process=pid)
return len(windows) > 0
except Exc