pywinauto-打开程序+连接已打开的程序

一、安装pywinauto

1.安装最新版本

bash 复制代码
//安装最新版本
pip install pywinauto

2.安装指定版本

bash 复制代码
//安装指定版本
pip install pywinauto==0.6.9

3.安装成功标志

第一步查看:

第二步查看:

2.

3.

二、打开程序

1.建一个python文件

2.打开应用程序的语法

a.导入库

python 复制代码
from pywinauto.application import Application

b.标准语法

python 复制代码
# win32 后端
app = Application(backend="win32").start("exe路径")
# uia 后端
app = Application(backend="uia").start("exe路径")

案例1-在环境路径中配置好了:

python 复制代码
from pywinauto.application import Application

# 用win32后端启动记事本(标准写法,可直接运行)
app = Application(backend="win32").start("notepad.exe")

# 用uia后端启动记事本(标准写法,可直接运行)
app = Application(backend="uia").start("notepad.exe")

案例2-绝对路径

python 复制代码
from pywinauto.application import Application

# win32 后端(传统程序用)
app_win32 = Application(backend="win32").start("C:\Windows\System32\notepad.exe")

# uia 后端(现代程序用)
app_uia = Application(backend="uia").start("C:\Windows\System32\notepad.exe")

补充:win32 和 uia的区别

bash 复制代码
1. 核心定位不一样
 
- win32 后端:是 Windows 很早就有的一套自动化接口,属于"老派方案",主要给早期的老式程序用,比如用 VB、MFC、Delphi 写的软件。
- uia 后端:是微软后来推出的新一代自动化接口,专门给现代程序设计,比如 Qt、WPF、.NET、新版 Office、浏览器这类。
 
 
 
2. 控件识别能力不同
 
- win32:识别逻辑很简单,只能靠窗口句柄、类名和标题来定位控件。对传统的、结构简单的控件很稳,但对现代软件里的自定义控件、复杂布局,基本"看不见",比如 Qt 写的按钮、列表,它经常识别失败。
- uia:能穿透现代UI框架,深入识别控件的属性、层级和状态,哪怕是复杂的自定义控件,也能精准定位,兼容性比 win32 强很多。
 
 
 
3. 适用场景不一样
 
- win32 适用:电脑自带的老版记事本、计算器,还有十几年前开发的老软件。
- uia 适用:现在大部分新软件,包括你用 Qt 写的音乐播放器、新版 Windows 自带程序、浏览器、Office 等,都是用这个。
 
 
 
4. 实战里怎么选?
 
- 写自动化脚本时,优先试 uia,现在绝大多数场景都能用它搞定。
- 如果 uia 识别不到控件,再换成 win32 试,比如遇到非常老的程序时,win32 反而更稳定。

三、连接已经打开的应用程序+用进程id

a.导入库

python 复制代码
from pywinauto.application import Application

b.标准语法

python 复制代码
# 按进程PID连接已运行程序
app = Application(backend="uia").connect(process=PID数值)

补充其他的语法connect:

python 复制代码
python
  
from pywinauto import Application

# 基础格式:指定后端 + connect() 连接已运行程序
# 后端可选:uia / win32

# 1. 按进程PID连接
app = Application("uia").connect(process=PID值)
app = Application("win32").connect(process=PID值)

# 2. 按窗口标题匹配
app = Application("uia").connect(title="完整标题")          # 精确匹配
app = Application("uia").connect(title_re="标题关键词")     # 正则模糊匹配

# 3. 按窗口类名匹配
app = Application("uia").connect(class_name="类名")         # 精确匹配
app = Application("uia").connect(class_name_re="类名关键词")# 正则模糊匹配

# 4. 按窗口句柄连接
app = Application("uia").connect(handle=句柄数值)

# 5. 多条件组合匹配
app = Application("uia").connect(title="标题", class_name="类名")

# 6. 附加通用参数(超时、是否仅可见窗口)
app = Application("uia").connect(process=PID值, timeout=10, visible_only=True)

c.进程id查看方法-任务管理器/UI Spy

bash 复制代码
Ctrl + Shift + Esc
直接弹出任务管理器,不用多一步,日常和卡死时都好用。
 
其他常用
 
- Ctrl + Alt + Del → 选"任务管理器"
- Win + X → 按 T
- 任务栏空白处 → 右键 → 任务管理器
- Win+R → 输入 taskmgr
 
查 PID,直接用 Ctrl+Shift+Esc 最快。

d.UI Spy 下载使用(后面出一个,这里不讲)

e.案例

python 复制代码
from pywinauto.application import Application
app = Application("uia").connect(process=1234)

联合使用案例:

python 复制代码
import time
from pywinauto.application import Application

# 1. 启动应用程序(记事本)
Application(backend="uia").start("notepad.exe")
time.sleep(3)  # 等待程序加载完成

# 2. 连接到已启动的记事本窗口
app = Application(backend="uia").connect(title_re=".*Notepad")

# 3. 获取窗口对象
notepad = app.window(title_re=".*Notepad")

# 4. 操作控件:在文本编辑区域输入内容
notepad.Document.type_keys("Hello, Pywinauto!")

# 5. 关闭应用程序
notepad.close()
 
 
 

喜欢这篇笔记的宝子,记得一键三连哦,你们的鼓励是我更新的最大动力。

相关推荐
你驴我10 小时前
WhatsApp 多账号下消息已读回执的实时聚合与推送实践
后端·python
愚公移码10 小时前
蓝凌EKP18产品:流程虚拟机(PVM)
java·开发语言·前端
十月的皮皮11 小时前
stm20260720-从新手 C 到量产 STM32 工程:程序设计推导指南
c语言·开发语言·stm32·stm32cubemx·hal库
Echo缘11 小时前
嵌入式系统C语言资源分类与内存分布分析
c语言·开发语言
JaneConan12 小时前
鸿蒙 ArkUI 深水区:@Watch 和 @Observed,状态变了「自动跑」+ 嵌套对象「深层重绘」
开发语言·后端·ui·harmonyos
赤水无泪12 小时前
qt中图标、名称的设置方式
开发语言·qt
王莎莎-MinerU12 小时前
MCP 解决的是工具接入,科研 Agent 还缺的是科学证据接口标准化
开发语言·网络·人工智能·深度学习·pdf·c#·php
橘子海全栈攻城狮12 小时前
【最新源码】基于SpringBoot + Vue的超市管理系统的设计与实现D002
java·开发语言·vue.js·spring boot·后端·spring
在水一缸12 小时前
深入浅出 Catch2:现代 C++ 测试框架的优雅实践
开发语言·c++·单元测试·log4j·测试框架·catch2
AC赳赳老秦12 小时前
OpenClaw 采集任务日志审计:全程记录采集行为,满足合规溯源与企业审计要求
java·大数据·python·数据挖掘·数据分析·php·openclaw