Pywinauto是基于Python开发的,用于自动化测试的脚本模块,主要操做于Windows标准图形界面。它能够容许你很容易的发送鼠标、键盘动做给Windows的对话框和控件。
其中,最主要功能为对windows标准控件的一系列动做可编程处理。包括对窗口的指定、鼠标或键盘操做、得到控件属性等等。程序的开始为对所需应用的启 动或链接。得到程序链接后,pywinauto经过窗口的名称、类名、是否可见等属性寻找匹配的窗口,进而经过相似方法寻找用户所需的控件,并得到相应的 句柄。以后,用户可经过易理解的编程方式对指定控件进行相关操做的编程,包括鼠标点击、键盘输入、判断控件间关系、获取控件属性等。
官方网站:https://pywinauto.readthedocs.io/en/latest/contents.html,html
pywinauto使用
首先,导入这个模块python
from pywinauto.application import Application
- 1
(一) 判断程序的backend
注意,首先须要判断你要进行的程序是用什么语言写的,在实例化的时候会有区别,主要是判断backend是什么。

那么如何判断程序的backend是’win32’仍是’uia’呢?官方文档中推荐使用spy++和inspect来检查。有人专门整理了一下,放在github上了https://github.com/blackrosezy/gui-inspect-tool。
spy++我们以前讲过。接下来将将如何使用inspect来判断backend的类别。git
Switch Inspect.exe into UIA mode (using MS UI Automation). If it can show more controls and their properties than Spy++, probably the "uia" backend is your choice.
- 1
将inspect左上角的下拉列表中切换到“UI Automation”,而后鼠标点一下你须要测试的程序窗体,inspect就会显示相关信息。
下图为点击window文件夹的结果,inspect中显示了相关的信息,以下图所示。说明backend为uia。
github
再来看点击 屏幕录像专家程序的结果

inspect中显示拒绝访问,说明屏幕录像专家程序的backend应该是win32。编程
(二)肯定自动化入口点
这里主要是限制自动化控制进程的范围。如一个程序有多个实例,自动化控制一个实例,而保证其余实例(进程)不受影响。
主要有两种对象能够创建这种入口点——Application() , Desktop().
Application的做用范围是一个进程,如通常的桌面应用程序都为此类。
Desktop的做用范围能够跨进程。主要用于像win10的计算器这样包含多个进程的程序。这种目前比较少见。使用方法见entry-points-for-automationwindows
(三)链接到进程
创建好入口后,咱们须要链接到进程中。这里有两种方法:
- 从新开启一个进程。使用Application对象的start()方法app
start(self, cmd_line, timeout=app_start_timeout) # instance method:
- 1
这里的cmd_line参数就是你使用命令行启动程序的命令语句。因此能够很方便的实现带输入参数的程序启动。
启动屏幕录像专家,能够使用以下代码:函数
app = Application().start(r"D:\Program Files (x86)\tlxsoft\屏幕录像专家 共享版 V2017\屏录专家.exe")
- 1
- 链接到已有的进程。使用Application对象的connect()方法。这个方法对已有进程的绑定很是灵活。
1.使用进程ID (PID)进行绑定。
app = Application().connect(process=19188)
- 1
进程的PID能够在任务管理器中查看。
工具
2.使用窗口句柄绑定测试
app = Application().connect(handle=0x00230DB6)
- 1
窗口句柄能够在Spy++中查看

3.使用程序路径绑定
app = Application().connect(path=r"D:\Program Files (x86)\tlxsoft\屏幕录像专家 共享版 V2017\屏录专家.exe")
4.使用标题、类型等匹配
app = Application().connect(title_re="屏幕录像专家.*", class_name="TMainForm")
第一、2种方法通用性不强,每次运行ID和窗口句柄均可能不同。第3种方法最直接简单(j建议使用),而第4种方法灵活性最强。
(四) 选择菜单项
我的感受pywinauto最方便的地方之一就是可以很轻易的操做菜单,并且对于多级菜单毫无压力。

下面介绍两种方法来操做它:
- 使用menu_select()函数进行选择
要从屏幕录像专家程序的菜单选中转换工具->EXE/LXE转成MP4。只须要在python中加入以下语句:
dlg_spec = app.window(title='屏幕录像专家 V2017') dlg_spec.menu_select(r"转换工具->EXE/LXE转成MP4")
- 使用快捷键进行选择
能够看到,菜单的每一个选项都对应着快捷键,能够使用组合的快捷键直接访问咱们须要的选项。
使用type_keys()函数,这里须要的快捷键是Alt+T+P:
dlg_spec = app.window(title='屏幕录像专家 V2017') dlg_spec.type_keys('%TP')
对于一些特殊符号的快捷键,对应的码表以下:
SHIFT + CTRL ^ ALT % 空格键 {SPACE} BACKSPACE {BACKSPACE}、{BS} or {BKSP} BREAK {BREAK} CAPS LOCK {CAPSLOCK} DEL or DELETE {DELETE} or {DEL} DOWN ARROW {DOWN} END {END} ENTER {ENTER} or ~ ESC {ESC} HELP {HELP} HOME {HOME} INS or INSERT {INSERT} or {INS} LEFT ARROW {LEFT} NUM LOCK {NUMLOCK} PAGE DOWN {PGDN} PAGE UP {PGUP} PRINT SCREEN {PRTSC} RIGHT ARROW {RIGHT} SCROLL LOCK {SCROLLLOCK} TAB {TAB} UP ARROW {UP} + {ADD} - {SUBTRACT} * {MULTIPLY} / {DIVIDE} F1 {F1} F2 {F2} F3 {F3} ..... F15 {F15} F16 {F16}
- 束后,EXE转MP4的插件窗口就弹出来了。