get started

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 & Desktop

application、desktop对象都是pywinauto自动化编程的入口。

2.1 Application

application对象适用于单进程应用自动化,连接应用后,方可使用它,以下列举了两种连接应用的方法:

2.1.1 start()

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

from pywinauto.application import Application

app = Application(backend="win32")

app.start(cmd_line=r"C:\Windows\system32\notepad.exe")

2.1.2 connect()

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

from pywinauto.application import Application

app = Application(backend="win32")

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

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

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

# 通过匹配dialog的标题来连接应用
# 更多匹配参数请参考:https://pywinauto.readthedocs.io/en/latest/code/pywinauto.findwindows.html#pywinauto.findwindows.find_elements
app.connect(title="无标题 - 记事本")

2.2 Desktop

desktop对象适用于多进程应用自动化,可直接获取dialog,例如:

from pywinauto import Desktop

desktop = Desktop(backend="uia")

# 匹配满足标题的显示(没有最小化)dialog
dlg1 = desktop.window(title="广州_百度搜索 - Google Chrome")
dlg2 = desktop.window(title="深圳_百度搜索 - Google Chrome")

若出来这种情况:

 那么,包含深圳搜索词的dialog将视为未显示。

3. Dialog

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

from pywinauto.application import Application
from pprint import pprint

app = Application(backend="win32")

app.connect(title="无标题 - 记事本")

# 输出所有dialog
pprint(app.windows())

# 通过dialog名来获取dialog
dlg = app.Notepad
# =
dlg = app["Notepad"]

# 获取置顶的dialog
dlg = app.top_window()

# 通过匹配dialog的标题来获取dialog
# 更多匹配参数请参考:https://pywinauto.readthedocs.io/en/latest/code/pywinauto.findwindows.html?highlight=findwindows.find_windows()
dlg = app.window(title="无标题 - 记事本")

4. Control

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

from pywinauto.application import Application

app = Application(backend="win32")

app.connect(title="无标题 - 记事本")

dlg = app["Notepad"]

# 输出所有control
dlg.print_control_identifiers()

# 设置文本为test
dlg.Edit.set_text("test")
# =
dlg["Edit"].set_text("test")

4.1 Function

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

posted @ 2023-06-18 18:32  monkeyDragon  阅读(336)  评论(0)    收藏  举报