get started

发布时间 2023-06-18 18:42:58作者: monkeyDragon

1. pywinauto后端(pywinauto’s backend,以下简称为backend)

使用pywinauto的第一步是确定应用使用了哪种backend,以下列举了两种backend:

  • win32(默认backend)

MFC,VB6,VCL简单的WinForms控件和大多数旧的应用程序所使用。

  • uia

WinForms,WPF,Store apps,Qt5,浏览器所使用。

若想更为准确地确定backend,可以使用辅助工具:Spy++、Inspect.exe,相关下载链接:https://github.com/blackrosezy/gui-inspect-toolhttps://www.pconlife.com/viewfileinfo/inspect-exe/

backend确定规则:比较Spy++,将Inspect.exe切换至UI Automation模式,若显示更多控件,则应当选择uia,否则选择win32。

2. application

application对象是pywinauto自动化编程的入口,连接应用后,方可使用它,以下列举了两种连接应用的方法:

2.1 start()

start()用于应用未启动时,例如:

app = Application()

app.start(cmd_line=r"c:\path\to\your\application -a -n -y --arguments", timeout=15) # timeout为可选参数,表示等待时间,当应用需要较长时间启动时,需要指定此参数

2.2 connect()

connect()用于应用已启动时,例如:

app = Application()

# 通过进程号来连接应用
app.connect(process=2341)

# 通过句柄来连接应用
app.connect(handle=0x010f0c)

# 通过进程的可执行文件来连接应用
app.connect(path=r"c:\windows\system32\notepad.exe")

# 通过应用窗口的一些参数来连接应用,具体参数参考:https://pywinauto.readthedocs.io/en/latest/code/pywinauto.findwindows.html#pywinauto.findwindows.find_elements
app.connect(title_re=".*Notepad", class_name="Notepad")

 3. Dialog

连接完应用后,需要获取一个dialog对象来进行自动化,获取方式有:

# 通过应用窗口的标题来获取dialog对象
dlg = app.Notepad
# ==
dlg = app['Notepad']

# 通过top_window()来获取dialog对象
dlg = app.top_window() # 返回应用的最顶层窗口

# 通过应用窗口的一些参数来获取dialog对象,具体参数参考:https://pywinauto.readthedocs.io/en/latest/code/pywinauto.findwindows.html?highlight=findwindows.find_windows()#pywinauto.findwindows.find_windows
dlg = app.window(title_re="Page Setup", class_name="#32770")

4. Control

自动化的基本操作单元是control对象,获取方式有:

app.dlg.control
# ==
# 此方式采用最佳匹配模式,例如:app["记事本"]["记事本Edit"]等同于app["无标题 - 记事本"]["无标题 - 记事本Edit"]
app['dlg']['control'] # app.dlg.print_control_identifiers()用于输出dialog下的所有control

4.1 Function

control中可用的function参考:https://pywinauto.readthedocs.io/en/latest/controls_overview.html