uiautomation实现自动化

这篇博客介绍了如何利用Python的uiautomation库来操控Windows应用程序,例如计算器。首先,通过CMD安装uiautomation库,然后使用UISPY工具获取控件的属性。根据ControlType,可以捕获不同类型的控件,如WindowControl或TextControl。接着,通过指定的属性进行操作,如按钮点击、文本输入等。示例代码展示了如何打开计算器,点击数字和运算符,获取计算结果,并进行截图及保存。最后,关闭计算器窗口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.下载UI SPY

下载地址:https://download.youkuaiyun.com/download/yangzhichao_csdn/85389759

2.CMD指令导入uiautomation库

pip install uiautomation

3.打开计算器,然后打开UISpy

如图ControlType为”ControlType.Window”

那么捕获窗口就用:uiautomation.WindowControl

如果ControlType为”ControlType.Text”

那么捕获窗口就用:uiautomation.TextControl

依次类推...

如果ControlType为”ControlType.Xxx”

那么捕获窗口就用:uiautomation.XxxControl

如果类型不明确,则使用uiautomation.Control

Uiautomation元素获取方法如下

程序窗口:uiautomation.WindowControl
按钮:uiautomation.ButtonControl
文本:uiautomation.TextControl
输入窗口:uiautomation.EditControl
文档控件:uiautomation.DocumentControl
单选控件:uiautomation.CheckBoxControl
复选控件:uiautomation.ComboBoxControl
日历控件:uiautomation.CalendarControl

 Uiautomation元素的属性

ClassName、Name、ProcessId、AutomationId、searchDepth

常用的操作有

DoubleClick()双击
Click()单击
RightClick()右键点击
SendKeys()发送字符
SetValue()传值

4.代码写法

打开计算器

import subprocess
#打开计算器
subprocess.Popen('C:\WINDOWS\system32\calc.exe')

#获取计算器的窗口

searchDepth的值表示搜索的层级,根据需求填写

import uiautomation as aut

#捕获窗口
win = aut.WindowControl(ClassName="ApplicationFrameWindow",searchDepth=1)

#设置获取超时时间和应用窗口始终前置,被控应用一定要在最前面,不然控制不了

#设置全局搜索超时时间 15s
aut.uiautomation.SetGlobalSearchTimeout(15)

#控制的应用窗口前置
win.SetTopmost(True)

#按钮点击

#计算器的数字区域
number_group = win.Control(searchDepth=3,Name="数字键盘")

number_group.ButtonControl(Name="一").Click()

5.控制计算器的完整例子

import subprocess
import uiautomation as aui

#控制计算器
#打开计算器
subprocess.Popen('C:\WINDOWS\system32\calc.exe')

#设置全局搜索超时时间 15s
aui.uiautomation.SetGlobalSearchTimeout(15)

#捕获窗口
win = aui.WindowControl(ClassName="ApplicationFrameWindow",searchDepth=1)

#控制的应用窗口前置
win.SetTopmost(True)

#计算器的运算符区域,此处用Name是因为“标准运算符”和“数字键盘”的ClassName一致,
# 所以用name属性,不用ClassName
operator_group  = win.Control(searchDepth=3,Name="标准运算符")

#计算器的数字区域
number_group = win.Control(searchDepth=3,Name="数字键盘")

number_group.ButtonControl(Name="一").Click()
operator_group.ButtonControl(Name="加").Click()
number_group.ButtonControl(Name="二").Click()
operator_group.ButtonControl(Name="等于").Click()

#获取结果
nResult = win.TextControl(AutomationId="CalculatorResults").Name
print("计算结果为:",nResult)

# 截图并保存到指定路径
win.CaptureToImage('C:/Users/user/Desktop/1.png')
# 关闭程序
win.GetWindowPattern().Close()
import subprocess
import uiautomation as aui

#控制计算器
#打开计算器
subprocess.Popen('C:\WINDOWS\system32\calc.exe')

#设置全局搜索超时时间 15s
aui.uiautomation.SetGlobalSearchTimeout(15)

#捕获窗口
win = aui.WindowControl(ClassName="ApplicationFrameWindow",searchDepth=1)

#控制的应用窗口前置
win.SetTopmost(True)

#计算器的运算符区域,此处用Name是因为“标准运算符”和“数字键盘”的ClassName一致,
# 所以用name属性,不用ClassName
operator_group  = win.Control(searchDepth=3,Name="标准运算符")

#计算器的数字区域
number_group = win.Control(searchDepth=3,Name="数字键盘")

number_group.ButtonControl(Name="一").Click()
operator_group.ButtonControl(Name="加").Click()
number_group.ButtonControl(Name="二").Click()
operator_group.ButtonControl(Name="等于").Click()

#获取结果
nResult = win.TextControl(AutomationId="CalculatorResults").Name
print("计算结果为:",nResult)

# 截图并保存到指定路径
win.CaptureToImage('C:/Users/user/Desktop/1.png')
# 关闭程序
win.GetWindowPattern().Close()

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值