当前位置: 首页 > news >正文

Pywinauto鼠标操作指南

Pywinauto是一个强大的Python库,用于自动化Windows桌面应用程序的测试。它提供了一系列工具和API来模拟用户输入,包括键盘、鼠标事件,以及与各种窗口控件交互的能力。本文将详细介绍如何使用Pywinauto来执行鼠标操作,并通过一些示例来展示如何在实际应用中利用这些功能。

一、Pywinauto简介

Pywinauto是一个跨平台模块,旨在模拟真实用户的鼠标事件。它能够模拟点击、双击、移动鼠标光标、按下鼠标按钮、释放鼠标按钮、右击以及滚轮操作。这些功能对于自动化测试、GUI界面的交互测试以及日常开发调试都极为有用。

二、安装Pywinauto

在开始之前,确保你已经在Python环境中安装了Pywinauto。如果尚未安装,可以通过pip命令轻松完成:

pip install pywinauto
三、基础鼠标操作

Pywinauto的mouse模块提供了多个函数来模拟鼠标的各种操作。下面是一些常见的鼠标操作函数及其用法:

  • click(button='left', coords=(0, 0)):在指定坐标处点击鼠标。默认情况下,点击左键。你可以通过传入'right''middle'来指定右键或中键。
  • double_click(button='left', coords=(0, 0)):在指定坐标处双击鼠标。同样,默认为左键,也可以指定其他按钮。
  • move(coords=(0, 0)):将鼠标移动到指定坐标位置。
  • press(button='left', coords=(0, 0)):按住鼠标按钮,直到调用release函数前一直按着。
  • release(button='left', coords=(0, 0)):释放鼠标按钮。
  • right_click(coords=(0, 0)):在指定坐标处右击鼠标。
  • scroll(coords=(0, 0), wheel_dist=1):滚动鼠标滚轮。wheel_dist参数指定了滚动的距离,正值表示向上滚动,负值则向下。
  • wheel_click(coords=(0, 0)):在指定坐标处点击鼠标滚轮。
四、示例:模拟鼠标操作

让我们通过一个简单的例子来看看如何使用Pywinauto来模拟鼠标操作。假设我们要编写一个脚本来模拟打开计算器程序,并通过鼠标点击输入数字“123”。

from pywinauto import Application
from pywinauto.keyboard import SendKeys
from pywinauto.mouse import click, move# 启动计算器程序
app = Application().start('calc.exe')# 等待计算器窗口出现
app.UntitledCalculator.wait('ready')# 获取计算器窗口的位置
window_rect = app.UntitledCalculator.rectangle()# 计算数字按钮的位置
button_width = 50
button_height = 25
one_button_pos = (window_rect.left + button_width, window_rect.top + button_height * 3)
two_button_pos = (window_rect.left + button_width * 2, window_rect.top + button_height * 3)
three_button_pos = (window_rect.left + button_width * 3, window_rect.top + button_height * 3)# 移动鼠标并点击“1”
move(coords=one_button_pos)
click(coords=one_button_pos)# 移动鼠标并点击“2”
move(coords=two_button_pos)
click(coords=two_button_pos)# 移动鼠标并点击“3”
move(coords=three_button_pos)
click(coords=three_button_pos)# 模拟按下加号键
SendKeys('+')# 移动鼠标并点击“1”
move(coords=one_button_pos)
click(coords=one_button_pos)# 模拟按下等号键
SendKeys('=')# 等待计算结果出现
app.UntitledCalculator.wait('ready')
result = app.UntitledCalculator.Edit.texts()[0]print(f"计算结果是: {result}")

上述脚本首先启动计算器程序,然后通过获取窗口的位置来计算出数字按钮的大致位置。接着,通过移动鼠标并点击相应的位置来模拟输入数字。最后,使用SendKeys来发送加号和等号键,模拟计算过程。

五、进阶技巧:使用鼠标操作进行自动化测试

在实际的软件测试过程中,鼠标操作常常用于模拟用户的交互行为。比如,你可以使用Pywinauto来验证某个按钮是否正确响应了用户的点击动作,或者测试一个滑动条是否能够正确地改变其值。为了达到这一目的,你可能还需要结合Pywinauto提供的其他功能,如识别窗口、获取控件属性等。

六、注意事项

虽然Pywinauto提供了丰富的鼠标操作功能,但在使用时也需要注意一些事项:

  1. 准确性:鼠标操作的位置需要精确计算,否则可能会点击到错误的地方。
  2. 同步性:某些操作可能需要等待一段时间才能继续下一步,因此在脚本中加入适当的等待时间是非常必要的。
  3. 异常处理:在模拟鼠标操作时,可能会遇到窗口未正确响应或其他意外情况,因此应该在脚本中加入适当的异常处理机制。
七、总结

通过本文,我们了解了如何使用Pywinauto来模拟各种鼠标操作,并通过一个具体的例子展示了如何在实际应用中运用这些技术。Pywinauto的强大之处在于它不仅限于鼠标操作,还提供了许多其他的功能来帮助开发者和测试人员更好地自动化他们的工作流程。希望这篇文章能够为你提供足够的指导,让你能够在自己的项目中有效地利用Pywinauto。

相关文章:

Pywinauto鼠标操作指南

Pywinauto是一个强大的Python库,用于自动化Windows桌面应用程序的测试。它提供了一系列工具和API来模拟用户输入,包括键盘、鼠标事件,以及与各种窗口控件交互的能力。本文将详细介绍如何使用Pywinauto来执行鼠标操作,并通过一些示…...

VRAY云渲染动画怎么都是图片?

动画实际上是由一系列连续的静态图像(帧)组成的,当这些帧快速连续播放时,就形成了动画效果。每一帧都是一个单独的图片,需要单独渲染。 云渲染农场的工作方式: 1、用户将3D场景文件和动画设置上传到云渲染…...

共享内存(C语言)

目录 一、引言 二、共享内存概述 1.什么是共享内存 2.共享内存的优势 三、共享内存的实现 1.创建共享内存 2.关联共享内存 3.访问共享内存 4.解除共享内存关联 5.删除共享内存 四、共享内存应用实例 五、总结 本文将深入探讨C语言中的共享内存技术,介绍其原理、…...

《JavaEE进阶》----16.<Mybatis简介、操作步骤、相关配置>

本篇博客讲记录: 1.回顾MySQL的JDBC操作 2..Mybatis简介、Mybatis操作数据库的步骤 3.Mybatis 相关日志的配置(日志的配置、驼峰自动转换的配置) 前言 之前学习应用分层时我们知道Web应用程序一般分为三层,Controller、Service、D…...

HuggingFists算子能力扩展-PythonScript

HuggingFists作为一个低代码平台,很多朋友会关心如何扩展平台算子能力。扩展平台尚不支持的算子功能。本文就介绍一种通过脚本算子扩展算子能力的解决方案。 HuggingFists支持Python和Javascript两种脚语言的算子。两种语言的使用方式相同,使用者可以任选…...

WInform记录的添加和显示

1、程序 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace ComboBoxApp {public part…...

★ C++基础篇 ★ string类的实现

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将继续和大家一起学习C基础篇第五章下篇----string类的模拟实现 ~ 上篇&#xff1a;★ C基础篇 ★ string类-CSDN博客 C基础篇专栏&#xff1a;★ C基础篇 ★_椎名澄嵐的博客-CSDN博客 目录 一 基础结构 二 迭代器 …...

rman compress

级别 初始 备完 耗时 low 1804 3572 0:10 High 1812 3176 2:00 MEDIUM 1820 3288 0:13 BASIC 1828 3444 0:56 ---不如MEDIUM&#xff0c;时间还长 NO COMPRESS 1820 5924 0:5 R…...

创建一个Oracle版本的JDK的Docker镜像

背景说明 OpenJDK 和Oracle JDK 一般情况下我们选择OpenJDK&#xff0c;两者针对大部分场景都可以满足&#xff0c;有些地方例如反射技术获得某些包路径下的类对象等&#xff0c;有时候选择OpenJDK会导致空指针异常。 两者在底层实现方面有部分区别。 创建镜像 这里是Linux…...

Harmony OS DevEco Studio 如何导入第三方库(以lottie为例)?-- HarmonyOS自学2

在做鸿蒙开发时&#xff0c;离不开第三方库的引入 一.有哪些支持的Harmony OS的 第三方库&#xff1f; 第三方库下载地址&#xff1a; 1 tpc_resource: 三方组件资源汇总 2 OpenHarmony三方库中心仓 二. 如何加入到DevEco Studio工程 以 lottie为例 OpenHarmony-TPC/lot…...

JAVA数据导出为Excel

目录 一、导入依赖 二、使用的相关类 1、XSSFWorkbook 构造方法 创建表 操作表 保存表 样式和格式 日期处理 密码保护 其他 2、XSSFSheet 获取属性和信息 行操作 列操作 表的属性 合并单元格 保护表 页眉和页脚 注释 其它 3、XSSFRow 获取属性和信息 单…...

【数据结构与算法 | 灵神题单 | 快慢指针(链表)篇】力扣876, 2095, 234

1. 力扣876&#xff1a;链表的中间节点 1.1 题目&#xff1a; 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[3,4,…...

第十五届蓝桥杯图形化省赛题目及解析

第十五届蓝桥杯图形化省赛题目及解析 一. 单选题 1. 运行以下程序&#xff0c;角色会说( )? A、29 B、31 C、33 D、35 正确答案&#xff1a;C 答案解析&#xff1a; 重复执行直到m>n不成立&#xff0c;即重复执行直到m<n。所有当m小于或者 等于n时&…...

linux下NTP服务器实战(chrony软件)

linux下NTP服务器实战(chrony软件) 记录linux下NTP服务器搭建及相关管理操作&#xff0c;使用chrony软件包安装部署。相比ntp服务&#xff0c;Chrony服务适用于更高精度、更高稳定性、自动化等场景。 1. 安装 chrony 在大多数Linux发行版上&#xff0c;chrony可以通过包管理…...

Java设计模式之命令模式介绍和案例示范

一、命令模式简介 命令模式&#xff08;Command Pattern&#xff09;是一种行为型设计模式&#xff0c;它将请求封装为一个对象&#xff0c;从而使你可以用不同的请求对客户端进行参数化、对请求排队或记录日志&#xff0c;以及支持可撤销的操作。命令模式的核心思想是将发出请…...

Leetcode面试经典150题-74.搜索二维矩阵

解法都在代码里&#xff0c;不懂就留言或者私信 二分查找&#xff0c;比较简单 class Solution {/**解题思路&#xff1a;每一行有序、每一列也有序&#xff0c;只是整体不是严格有序的&#xff0c;那我们需要找一个点&#xff0c;只能往两个方向走&#xff0c;往一个方向走是…...

【数字集成电路与系统设计】基本的组合逻辑电路

目录 一、简单例子引入 1.1 端口声明 1.1.2 Verilog实现 1.1.3 Chisel实现 逐行解释 1.2 内部逻辑实现 1.2.1 Verilog实现 1.2.2 Chisel实现 Chisel 关键点解释 1.3 常用的硬件原语 二、Chisel主要数据类型介绍 2.1 数据类型 2.2 数据宽度 2.3 数据转换 2.4 运算…...

11. 建立你的第一个Web3项目

11. 建立你的第一个Web3项目 在这一部分&#xff0c;我们将带你一步步地建立一个简单的Web3项目&#xff0c;从环境搭建到智能合约的创建与部署&#xff0c;再到开发一个去中心化应用&#xff08;dApp&#xff09;并与智能合约交互。这是你迈向Web3开发的第一步。 1. 环境搭建…...

衡石分析平台使用手册-容器部署

容器部署​ 本文介绍如何在容器上部署 HENGSHI SENSE&#xff0c;以及部署后如何进行版本升级和数据备份。 部署前准备工作​ 单机部署前&#xff0c;请完成如下准备工作。 1.检查 docker 的环境。需要满足 Docker 版本 > 17.09安装 docker-compose。 2.获取并导入离线…...

静态库,动态库以及makefile基础

一.静态&#xff08;链接&#xff09;库 libfun.a 静态链接进可执行程序 可执行程序偏大 运行时只需要可执行程序即可 生成静态库步骤 gcc -c fun.c -o fun.o ar rcv libfun.a fun.o //需要用.o文件生成数据库 运行 gcc main.c libfun.a 二.动态库 libfun.so 动…...

Python基础语法(1)上

常量和表达式 我们可以把 Python 当成一个计算器&#xff0c;来进行一些算术运算。 print(1 2 - 3) print(1 2 * 3) print(1 2 / 3) 这里我们可能会有疑问&#xff0c;为什么不是1.6666666666666667呢&#xff1f; 其实在编程中&#xff0c;一般没有“四舍五入”这样的规则…...

使用 Python/java/go做一个微信机器人

E云是一套完整的的第三方服务平台&#xff0c;包含微信API服务、企微API服务、SCRM系统定制、企微系统定制、服务类软件定制等模块&#xff0c;本文档主要讲述个微API服务相关&#xff0c;以下简称API&#xff0c;它能处理用户微信中的各种事件&#xff0c;提供了开发者与个微对…...

【北京迅为】iTOP-i.MX6开发板使用手册第四部分固件编译第十四章非设备树Android4.4系统编译

可根据用户需求更换&#xff0c;百变定制&#xff0c;高端产品无忧&#xff01; 迅为IMX6Q兼容四核商业级 、双核商业级、四核工业级 、更可提供i.MX6Q家族PLUS版本核心板。 核心板采用十层PCB沉金盲埋设计&#xff0c;更能保证电磁兼容与系统稳定。 公众号&#xff1a;迅为电…...

测评造假?Mistral首个多模态模型Pixtral 12B发布

测评造假&#xff1f;Mistral首个多模态模型Pixtral 12B发布&#xff01; 近日&#xff0c;法国人工智能&#xff08;AI&#xff09;初创公司Mistral于9月11日宣布推出其首款多模态AI大模型——Pixtral 12B&#xff0c;成功吸引了全球科技界的广泛关注。这款集图像与文本处理能…...

【Java-简单练习题】

1.”AABBBCCC“>>"A2B3C3" public class Test6 {public static void main(String[] args) {String ns "AABBBCCCC";String retcompress(ns);System.out.println(ret);}public static String compress(String str) {StringBuilder ret new StringB…...

Notepad++ 下载安装教程

目录 1.下教程 2.安装教程 1.下教程 Downloads | Notepad (notepad-plus-plus.org) 进入下载地址后选择最新版点击连接 点击链接后&#xff0c;向下滑动&#xff0c;下载适合自己电脑版本的安装包 这里大家没有梯子可能打不开页面&#xff0c;可以直接从本文开头下载。 2.安…...

shader 案例学习笔记之smoothstep函数

参考&#xff1a;smoothstep 用来生成0-1的平滑过渡值 smoothstep函数源码实现&#xff1a; float smoothstep(float t1, float t2, float x) {// Scale, bias and saturate x to 0..1 rangex clamp((x - t1) / (t2 - t1), 0.0, 1.0); // Evaluate polynomialreturn x * x *…...

大模型的第一个杀手级应用场景出来了

大家终于都意识到大模型首先改变的是软件行业自己&#xff0c;而软件的根基是代码生成。代码生成第一波就是AI辅助开发&#xff0c;这个会是大模型第一个杀手级应用。大家苦苦逼问自己的大模型杀手级应用&#xff0c;为什么会是辅助编程&#xff0c;这里说下什么&#xff1a; 必…...

不允许有程序员不知道这款AI代码扩写工具

01CodeGeeX编程大模型 在介绍什么是codeGeeX之前&#xff0c;先上图。 想象一下&#xff0c;自己写代码的时候旁边有个专家助手&#xff0c;随时跟你解释前面别人写的代码是什么意思&#xff0c;有什么缺陷。在你自己写的时候也可以每一步进行代码提示和代码扩写&#xff0c;是…...

java 的list集合排序自定义元素

在 Java 中&#xff0c;可以对包含自定义元素的List集合进行排序。通常可以使用Collections.sort()方法结合自定义的比较器来实现。 一、定义包含自定义元素的类 假设我们有一个表示学生的类Student&#xff1a; class Student {private int id;private String name;private …...