Python的Windows GUI自动化之Pywinauto(一)

2024-08-21 11:36

本文主要是介绍Python的Windows GUI自动化之Pywinauto(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引言:

Pywinauto是一个用于Windows GUI自动化的Python库

Pywinauto使用了Windows的UI Automation(UIA)和Microsoft Active Accessibility(MSAA)技术来与Windows应用程序进行交互。它可以识别应用程序的窗口、控件和各种属性,并提供了一系列方法来模拟用户操作,如点击、输入文本、选择菜单等。

使用Pywinauto,开发人员可以实现自动化测试、自动化操作和GUI脚本编写等任务。它可以帮助开发人员节省大量时间和精力,减少手动操作的工作量,提高软件开发的效率和质量。

一 、环境安装

pip install Pywinauto

二、确定的应用程序的控件可访问性技术(pywinauto的后端)

直白来说就是选择启动应用程序所选择的方法有2种

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

在Pywinauto中,使用Win32 API作为后端可以实现对Windows应用程序控件的访问和操作。Pywinauto使用Win32 API提供的函数和方法来定位控件,并执行相应的操作,如点击、输入文本等。它可以通过控件的句柄、类名、标题等属性来定位控件,并使用相应的Win32 API函数来执行操作。

当然也有许多旧的应用程序使用MFC、VB6、VCL等技术开发,这些应用程序通常使用传统的窗口、对话框、菜单等界面元素,而且不支持现代UI设计,如响应式布局、动画效果等。此外,这些应用程序可能存在安全漏洞和兼容性问题,需要及时更新或替换。

2、Ms UlAutomation API(backend=“uia”")

Pywinauto使用MS UI Automation来识别和操作Windows应用程序的控件。它可以通过控件的名称、类型、位置等属性来定位控件,并使用相应的方法来执行操作,如点击、输入文本等。Pywinauto还提供了一些辅助方法和功能,用于处理特定的控件类型,如对话框、菜单等。

三、启动应用程序

切入点主要是限制自动化控制进程的范围。如一个程序有多个实例,自动化控制一个实例,而保证其他实例(进程)不受影响。在pywinauto中主要有两种对象可以建立这种入口点:

一、Application:

在Pywinauto中,Application是一个重要的类,用于管理和操作Windows应用程序。它提供了许多方法和属性,用于启动应用程序、获取应用程序的窗口、控件等信息,并执行相应的操作。 Application的作用范围是一个进程,如一般的桌面应用程序都为此类。

下面是一些常用的Application类的方法和属性:

start():启动应用程序。可以传入应用程序的可执行文件路径或应用程序的名称。connect():连接到已经运行的应用程序。可以传入应用程序的进程ID或应用程序的标题。kill():关闭应用程序。windows():返回应用程序的所有窗口。可以使用索引或窗口标题来获取特定的窗口。window():返回特定窗口的句柄。DialogWrapper():用于处理对话框,可以通过对话框标题或类名来获取对话框的句柄。wait():等待应用程序的窗口出现或消失。wait_cpu_usage_lower():等待应用程序的CPU使用率降低。wait_cpu_usage_higher():等待应用程序的CPU使用率升高。wait_process_started():等待应用程序的进程启动。wait_process_exit():等待应用程序的进程退出。wait_for_idle():等待应用程序进入空闲状态。is_process_running():检查应用程序的进程是否正在运行。is_process_alive():检查应用程序的进程是否仍然活动。is_process_not_running():检查应用程序的进程是否已经退出。

通过使用Application类,可以方便地启动、连接、关闭应用程序,并对其窗

二、Desktop

在Pywinauto中,Desktop是一个重要的类,用于表示整个Windows桌面。它提供了一些方法和属性,用于访问和操作桌面上的应用程序和窗口。Desktop的作用范围可以跨进程。主要用于一个程序可以包含多个实例(进程)的程序。

下面是一些常用的Desktop类的方法和属性:

windows():返回桌面上的所有窗口。可以使用索引或窗口标题来获取特定的窗口。window():返回特定窗口的句柄。DialogWrapper():用于处理对话框,可以通过对话框标题或类名来获取对话框的句柄。child_window():返回特定窗口的子窗口。wait():等待特定窗口出现或消失。wait_cpu_usage_lower():等待桌面上的应用程序的CPU使用率降低。wait_cpu_usage_higher():等待桌面上的应用程序的CPU使用率升高。wait_process_started():等待桌面上的应用程序的进程启动。wait_process_exit():等待桌面上的应用程序的进程退出。wait_for_idle():等待桌面上的应用程序进入空闲状态。

通过使用Desktop类,可以方便地访问和操作桌面上的应用程序和窗口。可以通过获取窗口句柄、控件句柄等来实现对应用程序的自动化测试、任务自动化等功能。可以通过等待特定的窗口出现或消失来控制程序执行的流程。可以通过等待应用程序的CPU使用率降低或进程启动来确保应用程序的稳定性和可用性。

三、Desktop和Application是两个不同的类的区别

在Pywinauto中,Desktop和Application是两个不同的类,用于访问和操作Windows桌面上的应用程序和窗口。

Desktop类表示整个Windows桌面,它提供了一些方法和属性,用于获取桌面上的所有窗口、等待特定窗口的出现或消失、等待应用程序的CPU使用率降低等。通过Desktop类,可以方便地访问和操作桌面上的应用程序和窗口。

Application类用于管理和操作Windows应用程序,它提供了一些方法和属性,用于启动应用程序、连接到已经运行的应用程序、关闭应用程序、获取应用程序的窗口等。通过Application类,可以方便地启动、连接、关闭应用程序,并对其窗口和控件进行操作。

从功能上来说,Desktop类更加底层,可以访问和操作整个桌面上的应用程序和窗口。而Application类更加高层,更加专注于管理和操作单个应用程序。使用Desktop类可以获取桌面上的所有窗口,而使用Application类可以获取特定应用程序的窗口。

总的来说,Desktop类和Application类在Pywinauto中是两个互补的类,分别用于访问和操作桌面上的应用程序和窗口。根据具体的需求,可以选择使用其中的一个或两个类来完成相应的任务。

以上的讲述是最基本需要了解的东西,下一章节我们开始实际操作来熟悉Pywinauto对Windows GUI自动化

这篇关于Python的Windows GUI自动化之Pywinauto(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1093048

相关文章

使用Python实现无损放大图片功能

《使用Python实现无损放大图片功能》本文介绍了如何使用Python的Pillow库进行无损图片放大,区分了JPEG和PNG格式在放大过程中的特点,并给出了示例代码,JPEG格式可能受压缩影响,需先... 目录一、什么是无损放大?二、实现方法步骤1:读取图片步骤2:无损放大图片步骤3:保存图片三、示php

Python文本相似度计算的方法大全

《Python文本相似度计算的方法大全》文本相似度是指两个文本在内容、结构或语义上的相近程度,通常用0到1之间的数值表示,0表示完全不同,1表示完全相同,本文将深入解析多种文本相似度计算方法,帮助您选... 目录前言什么是文本相似度?1. Levenshtein 距离(编辑距离)核心公式实现示例2. Jac

使用Python实现一个简易计算器的新手指南

《使用Python实现一个简易计算器的新手指南》计算器是编程入门的经典项目,它涵盖了变量、输入输出、条件判断等核心编程概念,通过这个小项目,可以快速掌握Python的基础语法,并为后续更复杂的项目打下... 目录准备工作基础概念解析分步实现计算器第一步:获取用户输入第二步:实现基本运算第三步:显示计算结果进

Python多线程实现大文件快速下载的代码实现

《Python多线程实现大文件快速下载的代码实现》在互联网时代,文件下载是日常操作之一,尤其是大文件,然而,网络条件不稳定或带宽有限时,下载速度会变得很慢,本文将介绍如何使用Python实现多线程下载... 目录引言一、多线程下载原理二、python实现多线程下载代码说明:三、实战案例四、注意事项五、总结引

Python利用PySpark和Kafka实现流处理引擎构建指南

《Python利用PySpark和Kafka实现流处理引擎构建指南》本文将深入解剖基于Python的实时处理黄金组合:Kafka(分布式消息队列)与PySpark(分布式计算引擎)的化学反应,并构建一... 目录引言:数据洪流时代的生存法则第一章 Kafka:数据世界的中央神经系统消息引擎核心设计哲学高吞吐

Python进阶之列表推导式的10个核心技巧

《Python进阶之列表推导式的10个核心技巧》在Python编程中,列表推导式(ListComprehension)是提升代码效率的瑞士军刀,本文将通过真实场景案例,揭示列表推导式的进阶用法,希望对... 目录一、基础语法重构:理解推导式的底层逻辑二、嵌套循环:破解多维数据处理难题三、条件表达式:实现分支

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

Python如何实现高效的文件/目录比较

《Python如何实现高效的文件/目录比较》在系统维护、数据同步或版本控制场景中,我们经常需要比较两个目录的差异,本文将分享一下如何用Python实现高效的文件/目录比较,并灵活处理排除规则,希望对大... 目录案例一:基础目录比较与排除实现案例二:高性能大文件比较案例三:跨平台路径处理案例四:可视化差异报

python之uv使用详解

《python之uv使用详解》文章介绍uv在Ubuntu上用于Python项目管理,涵盖安装、初始化、依赖管理、运行调试及Docker应用,强调CI中使用--locked确保依赖一致性... 目录安装与更新standalonepip 安装创建php以及初始化项目依赖管理uv run直接在命令行运行pytho