pywinauto:用 Python 控制 Windows 桌面程序

该文章已生成可运行项目,

pywinauto:用 Python 控制 Windows 桌面程序

最近看到 pywinauto 这个项目,GitHub 上 6000 多 Star,做的事很明确——用 Python 代码操作 Windows 桌面应用,模拟鼠标点击、键盘输入、获取界面文本。对于写自动化测试、处理重复操作的场景,这工具能省不少事。

正文顶部截图

主要做两件事

pywinauto 的核心功能分两块:一是模拟人的操作,比如点按钮、输入文字、选菜单;二是读取界面信息,比如获取弹窗里的文本、遍历控件列表。

底层支持两套 Windows 自动化技术。Win32 API 是默认后端,兼容性最好,适合传统 Win32 桌面程序。MS UI Automation(UIA)则能处理 WPF、WinForms 等现代框架开发的程序。两套方案基本覆盖了 Windows 上绝大部分桌面应用。

写脚本的代码很简洁。启动记事本,打开帮助菜单,在编辑区输入文字,不到十行代码:

from pywinauto.application import Application
app = Application().start("notepad.exe")

app.UntitledNotepad.menu_select("Help->About Notepad")
app.AboutNotepad.OK.click()
app.UntitledNotepad.Edit.type_keys("pywinauto Works!", with_spaces = True)

代码读起来很直观,方法名一看就知道在做什么。控件按标题自动匹配,大部分情况下不需要手动指定控件 ID。

对于资源管理器这种更复杂的程序,UIA 后端能提供更好的支持。先启动资源管理器打开指定目录,然后通过进程路径连接到已运行的窗口,再用控件类型和名称定位目标元素:

from pywinauto import Desktop, Application

Application().start('explorer.exe "C:\\Program Files"')
app = Application(backend="uia").connect(path="explorer.exe", title="Program Files")

app.ProgramFiles.set_focus()
common_files = app.ProgramFiles.ItemsView.get_item('Common Files')
common_files.right_click_input()
app.ContextMenu.Properties.invoke()

Properties = Desktop(backend='uia').Common_Files_Properties
Properties.print_control_identifiers()
Properties.Cancel.click()
Properties.wait_not('visible')

README区域截图

安装和兼容性

pip install pywinauto 或 conda install -c conda-forge pywinauto 都能装。Windows 上依赖 pyWin32 和 comtypes,Linux 下需要 python-xlib。目前主力支持 Windows,跨平台计划也在推进,Linux 支持已在开发中。

如果需要对控件做截图,装个 Pillow 库就能调用 capture_as_image() 方法。跑单元测试的话需要额外安装 coverage。

适用场景

Windows 桌面端自动化测试是最常见的用途。把测试流程写成脚本,每次发布前自动跑一遍,省去手工点击的重复劳动。数据录入也是常见场景,大批量填表单、导入导出数据,手工操作容易出错,脚本执行稳定得多。

还有一类用法是做辅助工具。比如监控某个窗口的状态变化,满足条件时自动触发操作。调试桌面应用时,也可以用 pywinauto 脚本快速定位控件、打印控件树。

项目不需要额外安装 Agent 程序,直接用 Python 控制目标窗口,对熟悉 Python 的人来说上手很快。代码基于 BSD 3-clause 协议开源,项目最初由 Mark Mc Mahon 创建,0.6.0 版本以后由社区持续维护。

团队也说了这是业余项目,新功能开发都在工作之余进行。所以遇到 Bug 或想要新功能,去提 issue 就好,给点耐心。

小结

Windows 平台上用 Python 做 GUI 自动化,选择空间不大。pywinauto 不花哨,但功能扎实,API 设计得清楚,文档也比较完整。有桌面自动化需求的可以试试,至少省了手工点鼠标的时间。

pywinauto 不花哨,但功能扎实,API 设计得清楚,文档也比较完整。有桌面自动化需求的可以试试,至少省了手工点鼠标的时间。

本文章已经生成可运行项目
已经博主授权,源码转载自 https://pan.quark.cn/s/fdfcb1303993 ### 高速电路接口原理与应用详解 #### 引言 信息技术的迅猛进步推动了高速数据传输需求的持续提升,特别是在高性能计算、网络通信等关键领域。为了达成高效的数据交换,高速集成电路间的互连技术成为了研究的热点。本文将系统阐述几种典型的高速接口规范——PECL(Positive Emitter Coupled Logic)、LVECL(Low Voltage Emitter Coupled Logic)、CML(Current Mode Logic)和LVDS(Low Voltage Differential Signaling),并深入分析它们的电路构造和应用特性。 #### 1. ECL电路基础 ECL电路是早期为应对高速数据传输需求而研发的一种逻辑电路,其运行速度极快,最高可达到10Gbps。通过维持晶体管工作于线性和截止区域,ECL电路有效规避了饱和区的影响,从而获得了迅速的开关响应。接下来将具体解析ECL电路的构成要素及其运作机制。 #### 1.1 ECL线接收器电路组成 - **差分放大器**:由晶体管Q3、Q4、Q5构成,是整个电路的核心部分。其中,Q5作为恒流源,具备较大的交流等效电阻,能够提供稳定的电流,确保电路的稳定运作。 - **发射极跟随器输出电路**:由Q1、Q2组成,主要用于电平调整和输出驱动,确保输出信号与下一级电路的兼容性。 - **偏置电源**:由Q6、Q7以及二极管D1、D2构成,为差分放大器提供可靠的偏置电压,使其始终工作在线性放大区间。 #### 1.2 ECL电路的显著特性 - **高运行速率**:由于晶体管工作在线性和截止状态,不受...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值