Windows自动化之UIautomation(一)

一、UIAutomation的工作原理:

UIAutomation操作程序时会给程序发送WM_GETOBJECT消息,如果程序处理WM_GETOBJECT消息,实现UI Automation Provider,并调用函数
UiaReturnRawElementProvider(HWND hwnd,WPARAM wparam,LPARAM lparam,IRawElementProviderSimple *el),此程序就支持UIAutomation。

IRawElementProviderSimple 就是 UI Automation Provider,包含了控件的各种信息,如Name,ClassName,ContorlType,坐标等。

UIAutomation 根据程序返回的 IRawElementProviderSimple,就能遍历程序的控件,得到控件各种属性,进行自动化操作。若程序没有处理WM_GETOBJECT或没有实现UIAutomation Provider,UIAutomation则无法识别这些程序内的控件,不支持自动化。
很多DirectUI程序没有实现UIAutomation Provider,所以不支持自动化。

关于各控件所支持的控件模式,可参考:
https://docs.microsoft.com/zh-cn/windows/win32/winauto/uiauto-controlpatternmapping

二、安装

pip install uiautomation

三、使用

①获取窗口

import uiautomation as auto
# 前提是打开记事本-打开操作不在这里叙述
window_name = auto.WindowControl(searchDepth=1, ClassName="Notepad")  # 获取窗口
# 设置窗口前置
window_name.SetTopmost(True)
print(window_name.Name)

控件可用参数说明
searchFromControl = None:从哪个控件开始查找,如果为None,从根控件Desktop开始查找
searchDepth = 0xFFFFFFFF: 搜索深度
searchInterval = SEARCH_INTERVAL:搜索间隔
foundIndex = 1 :搜索到的满足搜索条件的控件索引,索引从1开始
Name:控件名字
SubName :控件部分名字
RegexName:使用re.match匹配符合正则表达式的名字,Name,SubName,RegexName只能使用一个,不能同时使用
ClassName :类名字
AutomationId: 控件AutomationId
AutomationIdControlType :控件类型
Depth:控件相对于searchFromControl的精确深度
Compare:自定义比较函数function(control: Control, depth: int)->bool
为了进一步操作该程序,我们可以使用inspect.exe工具分析控件结构

②UIAutomation的常见功能
显示桌面(相当于点击桌面右下角的按钮):

auto.ShowDesktop()

获取uiautomation已运行的时间:

auto.ProcessTime()

判断两个控件是否一致:

auto.ControlsAreSame(control1, control2)

鼠标点击指定坐标:

auto.Click(x, y)

右键单击:

auto.RightClick(x, y)

鼠标拖拽(鼠标从(x1,y1)位置按下鼠标拖动到(x2,y2)位置):

auto.DragDrop(x1, y1, x2, y2, moveSpeed=1)    # moveSpeed参数决定了移动的速度。

隐藏窗口:

win.Hide(0)

显示窗口:

win.Show(0)

窗口最小化:

win.Minimize()

窗口最大化:

win.Maximize()

判断窗口是否已经被最小化:

auto.IsIconic(win.NativeWindowHandle)   # IsIconic进支持传入本地窗口句柄。

管理员提权

# 将原本存在于__main__代码块中的内容存放于main()方法中即可
if __name__ =='__main__':if auto.IsUserAnAdmin():main()else:print('RunScriptAsAdmin', sys.executable, sys.argv)auto.RunScriptAsAdmin(sys.argv)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/584900.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

白话机器学习的数学-2-分类

1、设置问题 图片分类:只根据尺寸把它分类为 纵向图像和横向图像。 如果只用一条线将图中白色的点和黑色的点分开: 这次分类的目的就是找到这条线。 2、内积 找到一条线,这是否意味着我们要像学习回归时那样,求出一次函数的斜率…

关于 K8s 的一些基础概念整理

〇、前言 Kubernetes,将中间八个字母用数字 8 替换掉简称 k8s,是一个开源的容器集群管理系统,由谷歌开发并维护。它为跨主机的容器化应用提供资源调度、服务发现、高可用管理和弹性伸缩等功能。 下面简单列一下 k8s 的几个特性: 自…

学习笔记-MyBatis的工作原理。

Mybatis的工作原理 读取MyBatis配置文件:mybatis-config.xml为MyBatis的全局配置文件,配置了MyBatis的运行环境等信息,例如数据库连接信息。加载映射文件。映射文件即SQL映射文件,该文件中配置了操作数据库的SQL语句,…

如何使用人工智能算法解决实际业务问题?

使用人工智能算法解决实际业务问题的过程可以概括为以下几个步骤: 问题定义和数据采集:首先,需要明确业务问题,并收集相关的数据,包括结构化和非结构化数据。这些数据可以来自不同的来源,如数据库、文本、图…

clickhouse连接工具dbeaver

地址 地址: Download | DBeaver Community 安装 表引擎 表引擎之TinyLog 以列文件的形式保存在磁盘上,不支持索引,没有并发控制。一般保存少量数据的小表, 生产环境上作用有限,多用于平时练习测试用。 内存引擎&am…

k8s 架构

主要组件 k8s有如下的主要组件: Control plane(s) and worker node(s)OperatorsServicesPods of containersNamespaces and quotasNetwork and policiesStorage. 一个k8s集群是有一个或多个 cp(控制平面)节点和一组worker 节点组成的。这个…

GaussDB数据库中的同义词SYNONYM

目录 一、前言 二、GasussDB数据库中的Synonym 1、Synonym的概念 2、语法介绍 3、Synonym的用途 三、Synonym在GaussDB数据库中是如何使用的 1、表的同义词使用(示例) 2、视图的同义词使用(示例) 3、函数的同义词使用&am…

Redis实现滚动周榜|滚动榜单|直播间榜单|排行榜|Redis实现日榜05

方法:写当日榜单当日滚动榜次日滚动榜定时任务处理历史数据 实际上,这个步骤并不复杂,主要是为了解决定时数据在时间间隔切换时无法平滑过渡的问题。具体来说,在编写代码时,我们需要执行以下三个操作。 获取7天、30天…

LeetCode1232. Check If It Is a Straight Line

文章目录 一、题目二、题解 一、题目 You are given an array coordinates, coordinates[i] [x, y], where [x, y] represents the coordinate of a point. Check if these points make a straight line in the XY plane. Example 1: Input: coordinates [[1,2],[2,3],[3,…

YOLO训练results.csv文件可视化(原模型与改进模型对比可视化)

一、单独一个文件可视化(源码对应utils文件夹下的plots.py文件的plot_results类) from pathlib import Path import matplotlib.pyplot as plt import pandas as pd def plot_results(fileruns/train/exp9/results.csv, dir):# Plot training results.c…

前后端分离nodejs+vue医院预约挂号系统6nrhh

医院预约挂号系统主要有管理员、用户和医生三个功能模块。以下将对这三个功能的作用进行详细的剖析。 运行软件:vscode 前端nodejsvueElementUi 语言 node.js 框架:Express/koa 前端:Vue.js 数据库:mysql 开发软件:VScode/webstorm/hbuiderx均…

ubuntu下的磁盘管理

1. 磁盘文件目录 磁盘文件是linux下的/dev/sd*文件 2. 磁盘和目录容量查询 df:列出文件系统的使用量,主要查看文件系统的使用量 du:评估文件系统的磁盘使用量,主要是单个文件大小 3. 磁盘的挂载与卸载 mount:磁盘挂载 mount…

YOLOv8改进 | 细节创新篇 | iAFF迭代注意力特征融合助力多目标细节涨点

一、本文介绍 本文给大家带来的改进机制是iAFF(迭代注意力特征融合),其主要思想是通过改善特征融合过程来提高检测精度。传统的特征融合方法如加法或串联简单,未考虑到特定对象的融合适用性。iAFF通过引入多尺度通道注意力模块(我…

JDK9及之后版本使用 jlink 生成定制化的 JRE

许多java软件的运行需要依赖jre,在 jdk8 之后,不再提供默认的 jre,后续如果项目中还是想用 jre 的形式发布软件,那么可以使用 jlink 工具生成 jre。 一、jlink 命令详解 jlink 二、查看jdk中包含的所有模块 如果在 jdk 安装文件夹…

Hadoop之Yarn 详细教程

1、yarn 的基本介绍和产生背景 YARN 是 Hadoop2 引入的通用的资源管理和任务调度的平台,可以在 YARN 上运行 MapReduce、Tez、Spark 等多种计算框架,只要计算框架实现了 YARN 所定义的 接口,都可以运行在这套通用的 Hadoop 资源管理和任务调…

【经典算法】有趣的算法之---蚁群算法梳理

every blog every motto: You can do more than you think. 0. 前言 蚁群算法记录 1. 简介 蚁群算法(Ant Clony Optimization, ACO)是一种群智能算法,它是由一群无智能或有轻微智能的个体(Agent)通过相互协作而表现出智能行为,从而为求解复杂问题提供了一个新的可能性…

PB 按Excel动态创建对应字段

/* > Function: w_cwjk_xhyy.wf_dw_init >-------------------------------------------------------------------- > 描述: 按excel表格列名,创建对应字段,用于部分接口对应字段导出文件 >-------------------------------------------------------------------- …

VSCode远程开发配置

目录 概要远程开发插件安装开始连接SSH无密码登录开发环境配置 概要 现在很多公司都是直接远程到服务器上写代码,使用远程开发,可以在与生产环境相同的环境中开发、测试和部署代码,减少因环境不同而导致的问题。当下VSCode远程开发是支持的比…

STM32学习笔记十二:WS2812制作像素游戏屏-飞行射击游戏(2)探索时间间隔同步,双向链表

上章我们做好了空间的比例尺,不至于物体定位出错。这次我们尝试一下时间间隔的同步。当然,游戏中需要同步时间的地方很多,这里仅仅涉及很小的一个点。 我们已经创造了玩家飞机,是时候让它能发射子弹了。 发射子弹,哪…

ClickHouse基础知识(六):ClickHouse的副本配置

副本的目的主要是保障数据的高可用性,即使一台 ClickHouse 节点宕机,那么也可以 从其他服务器获得相同的数据。 1. 副本写入流程 2. 配置步骤 ➢ 启动 zookeeper 集群 ➢ 在hadoop101的/etc/clickhouse-server/config.d目录下创建一个名为metrika.xml…