Pywinauto的pywinauto.application模块提供了一个Application类,用来关联一个应用程序。其定义如下:
class pywinauto.application.Application(backend=’uia’,
datafilename=None,
allow_magic_lookup=True)
一般我们会在程序的开头声明一个Application的对象并根据打算关联的应用属性为其指定backend,例如
test_app = pywinauto.application.Application(backend="uia")
接着,我们需要将这个对象关联到实际的应用。
Application类提供了两种方法来进行应用程序关联:
一、start()方法
start( )方法用于启动一个可执行程序,它的参数不多
start(cmd_line, timeout=None, retry_interval=None, create_new_console=False, wait_for_idle=True, work_dir=None)
cmd_line: 是包含路径的启动应用程序的命令以及启动参数
timeout: 启动程序的超时时钟设置,默认为5s
create_new_console: 创建新的控制台,默认不创建
wait_for_idle: 是否等待到程序的Idle状态
work_dir: 指定工作目录
例如:
test_app.start(r"C:\Path\To\Program\test.exe")
二、connect()方法
connect( )方法用于联接一个已启动的应用程序,connect( )方法支持的参数,我们可以使用其中的一个或多个参数的组合来准确的找到想要关联的应用程序。下面就来介绍几种常见的联接应用程序的方法:
1. 通过process id
使用process参数指定process id查找应用程序并联接:
import pywinauto
#获取test.exe的process id
proc_id = pywinauto.application.process_from_module("test.exe")
#关联应用程序进程
test_app.connect(process = proc_id)
2. 通过主窗口标题
通过title参数指定窗口标题查找应用程序并联接,默认只查找top_level的窗口。
也可以通过title_re参数使用正则表达式来查找对应程序。
例如:
test_app.connect(title = "程序主窗口标题")
3. 通过应用程序路径
通过path参数指定可执行文件路径查找应用程序并联接
例如:
test_app.connect(path="C:\Path\To\Program\test.exe")
4. 通过窗口句柄
通过handle参数利用应用程序的任意层次窗口句柄查找应用程序并联接
例如:
test_app.connect(handle=window_handler)
5. 通过窗口类名
通过class_name或class_name_re参数利用应用程序窗口类名查找应用程序并联接,默认为top_level窗口。但是,使用此参数时一般需要搭配其他参数组合使用,以便确定目标应用的唯一性。
例如:
test_app.connect("title_re=".*test", class_name=“TestProgram”)
6. connect()方法可用的其他参数
connect()还能使用所有pywinauto.findwindows.find_elements()方法中的可用参数来辅助进行应用联接,一些常用的参数包括:
timeout: 进程启动超时设置,默认5s,该参数可以配合path参数使用,允许用户在执行
connect()方法后,该定时器超时之前启动应用程序。
top_level_only: 只查询top_level窗口,默认为True
enable_only: 只查询enable的窗口,默认为False
visible_only: 只查询可见的窗口,默认为True
depth: 窗口查询深度,默认为None
当Pywinauto关联上应用程序后,就可以使用其内置的各种方法来查找和操作应用程序中的各种窗体和控件了。