pywinauto

概述:Windows图形界面程序自动化——pywinauto

官方文档:https://pywinauto.readthedocs.io/en/latest/getting_started.html

Install

在线安装

1
pip install pywinauto

离线安装

搜索pypi下载指定安装文件

1
pip setup.py install

应用程序可访问技术

支持控件的访问技术:

(1)Win32 API (backend=”win32”) - 默认的backend)

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

(2)MS UI Automation API(backend=”uia”)

WinForms, WPF, Store apps, Qt5, 浏览器

启动

切入点主要是限制自动化控制进程的范围,如一个程序有多个实例,自动化控制一个实例,而保证其它实例(进程)不受影响。

在pywinauto中主要有两种对象可以建立这种入口点:

(1)Application的作用范围是一个进程,如一般的桌面应用程序都为此类。

(2)Desktop的作用范围可以跨进程。主要用于一个程序可以包含多个实例(进程)的程序。

Spy工具

  • Inspect

  • spy++

  • ViewWizard(窗口信息查看精灵)

下载地址:https://developer.microsoft.com/zh-cn/windows/downloads/windows-10-sdk/

示例

(1)连接或者开启程序

1
2
3
4
5
6
7
app = Application().start("C:\Program Files (x86)\Google\Chrome\Application\chrome.exe")
app = Application().connect(process=2341)
# process表示进程号
app = Application("uia").connect(handle=0x0x010f0c)
# handle表示句柄号,可使用spy++>查找窗口>拖动选择窗口>复制句柄号
app =Application().connect("notepad.exe")
# 直接连接应用文件名

(2)菜单选择

1
2
3
4
5
app = Application().start('notepad.exe')
title = '无标题-记事本'
menu_name = '帮助->关于记事本'
app[title].menu_select(menu_name)
app[title].menu_select("编辑->时间/日期(&D)")

(3)按钮点击

1
2
3
windows_name = u"关于记事本"
button_name = u"确定"
app[windows_name][button_name].click()

(4)显示控件、子窗体、菜单

1
print(app[title].print_control_identifiers())

(5)输入文字

1
2
3
app[title].Edit.type_keys("Pywinauto works!\n",with_spaces=True,with_newlines=True)
app[title].Edit.type_keys("Pywinauto works!\n",with_spaces=True)
# with_spaces支持空格,with_newlines支持换行

(6)移动鼠标

1
2
3
4
5
6
7
8
from pywinauto.mouse import move
import time
for i in range(1,10):
step_x = i*30
step_y = i*40
print(step_x,step_y)
move(coords=(step_x,step_y))
time.sleep(1)

(7)键盘指令

1
2
from pywinauto.keyboard import SendKeys
SendKeys("111111")

(8)启动

1
2
3
4
5
6
# 输入徽标键
SendKeys("{VK_LWIN}")
# 输入cmd
SendKeys("cmd")
# 输入回车键
SendKeys("{VK_RETURN}")