在自动化测试的开发中,有一些控件的ID是很难找到的,所以有些时候,我们直接设置鼠标的位置,然后是用click事件,会收到很好的效果。在Windows API中有个mouse_event函数为我们准备好了这一切。

这个函数在user32.dll这个库文件里面。我们可以在C:\WINDOWS\system32(XP系统)这个目录下找到这个文件,他是系统自带的。 我们以C#直接调用这个文件中的API为例子来说下怎么进行鼠标操作,首先在我们C#中声明引用,如果是一个基于From的程序,这个声明的位置写在你的From class就可以了
[System.Runtime.InteropServices.DllImport("user32")]
private static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);

参数 意义
dwFlags Long,下表中标志之一或它们的组合
dx,dy Long,根据MOUSEEVENTF_ABSOLUTE标志,指定x,y方向的绝对位置或相对位置
cButtons Long,没有使用
dwExtraInfo Long,没有使用

dwFlags常数 意义

const int MOUSEEVENTF_MOVE = 0x0001;      移动鼠标
const int MOUSEEVENTF_LEFTDOWN = 0x0002; 模拟鼠标左键按下
const int MOUSEEVENTF_LEFTUP = 0x0004; 模拟鼠标左键抬起
const int MOUSEEVENTF_RIGHTDOWN = 0x0008; 模拟鼠标右键按下
const int MOUSEEVENTF_RIGHTUP = 0x0010; 模拟鼠标右键抬起
const int MOUSEEVENTF_MIDDLEDOWN = 0x0020; 模拟鼠标中键按下
const int MOUSEEVENTF_MIDDLEUP = 0x0040; 模拟鼠标中键抬起
const int MOUSEEVENTF_ABSOLUTE = 0x8000;表明参数dX,dy含有规范化的绝对坐标。

如果不设置此位,参数含有相对数据:相对于上次位置的改动位置。

const int MOUSEEVENTF_WHEEL :在Windows NT中如果鼠标有一个轮,表明鼠标轮被移动。移动的数量由dwData给出。

dx/dy的意义

指定鼠标沿x轴的绝对位置或者从上次鼠标事件产生以来移动的数量,依赖于MOUSEEVENTF_ABSOLUTE的设置。给出的绝对数据作为鼠标的实际X/Y坐标;给出的相对数据作为移动的mickeys数。一个mickey表示鼠标移动的数量,表明鼠标已经移动。

dwData:

如果dwFlags为MOUSEEVENTF_WHEEL,则dwData指定鼠标轮移动的数量。正值表明鼠标轮向前转动,即远离用户的方向;负值表明鼠标轮向后转动,即朝向用户。一个轮击定义为WHEEL_DELTA,即120。

  如果dwFlagsS不是MOUSEEVENTF_WHEEL,则dWData应为零。

dwExtralnfo:

指定与鼠标事件相关的附加32位值。应用程序调用函数GetMessageExtraInfo来获得此附加信息。

返回值:无。

  备注:如果鼠标被移动,用设置MOUSEEVENTF_MOVE来表明,dX和dy保留移动的信息。给出的信息是绝对或相对整数值。

  如果指定了MOUSEEVENTF_ABSOLUTE值,则dX和dy含有标准化的绝对坐标,其值在0到65535之间。事件程序将此坐标映射到显示表面。坐标(0,0)映射到显示表面的左上角,(65535,65535)映射到右下角。

  如果没指定MOUSEEVENTF_ABSOLUTE,dX和dy表示相对于上次鼠标事件产生的位置(即上次报告的位置)的移动。正值表示鼠标向右(或下)移动;负值表示鼠标向左(或上)移动。

  程序中我们直接调用mouse_event函数就可以了
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 500, 500, 0, 0);

1、这里是鼠标左键按下和松开两个事件的组合即一次单击:
mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )

vb用法

mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0

2、模拟鼠标右键单击事件:
mouse_event (MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0 )

VB用法

mouse_event MOUSEEVENTF_RIGHTDOWN Or MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0

3、两次连续的鼠标左键单击事件 构成一次鼠标双击事件:
mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )
mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )

4、使用绝对坐标
MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 500, 500, 0, 0

需要说明的是,如果没有使用MOUSEEVENTF_ABSOLUTE,函数默认的是相对于鼠标当前位置的点,如果dx,和dy,用0,0表示,这函数认为是当前鼠标所在的点。

5、直接设定绝对坐标并单击(1024,768)为显示器分辨率,(X,Y)为相对于屏幕的坐标
mouse_event(MOUSEEVENTF_LEFTDOWN, X * 65536 / 1024, Y * 65536 / 768, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, X * 65536 / 1024, Y * 65536 / 768, 0, 0);
其中X,Y分别是你要点击的点的横坐标和纵坐标

用Mouse_event()来模拟鼠标操作相关推荐

  1. C# SendInput 实现模拟鼠标操作

    刚刚开始学习C#,想自己做一个网页游戏的挂.游戏里面有收钱的动作,一个建筑物一个建筑物的点,很累啊.于是想用C#模拟鼠标操作替我收钱,想着学习这个对以后的测试工作也有帮助,于是有了动力.学习过程也是曲 ...

  2. C#模拟鼠标操作以及键盘输入

    模拟鼠标以及键盘基本输入源代码 using System; using System.Collections.Generic; using System.Linq; using System.Runt ...

  3. 【向重复工作说不】c#之模拟鼠标操作

    一.写在前面 作为一个人力资源工作者,会经常遇到填表.报表的事务,其实有时候就是重复再重复的点击鼠标工作,特别是遇到一些复杂的客户端程序.网页程序,诸如用友客户端.社保管理系统等等,就尤其让人头疼.正 ...

  4. 真就释放双手?C#模拟鼠标操作

    前言 最近玩贪玩蓝月,老是让我呆呆站着领在线礼包?我可能每过几分钟就领一下礼包吗?害,要是有人能帮我一会点一下鼠标就好了- -于是,奇怪的知识又增加了- - 页面设计 注:因为控件可能有点多,代码中也 ...

  5. 利用Python模拟鼠标操作,一键将GIF文件载入CSDN的Markdown编辑器

    简 介: 讨论了在csdn的Markdown编译器中自动载入GIF文件的方法.使用了Python中的pyautogui软件包,可以通过Python的小程序实现一键将GIF文件载入CSDN的Markdo ...

  6. C#使用mouse_event函数模拟鼠标事件

    C#使用mouse_event函数模拟鼠标事件 mouse_event函数 private static extern int mouse_event(int dwFlags, int dx, int ...

  7. 使用python pynput完全模拟鼠标操作

    人生苦短,我用Python! 总是有些事情需要重复性机械性的操作,想要设计代码去做,有些程序又不给接口,这时最简单的方法就是,模拟鼠标操作! 除了不能生孩子,其他都能做的python!  一搜 果然有 ...

  8. pywinauto客户端自动化---模拟鼠标操作

    无论什么自动化,都避免不了模拟一些鼠标操作,pywinauto模块中也存在模拟鼠标操作方法 mouse mouse是pywinauto一个模拟鼠标的方法库,可以帮助模拟鼠标操作,直接输入坐标就可以了. ...

  9. Mouse.bat 模拟鼠标操作脚本

    mouse.bat 模拟鼠标操作, 调用方式 //clicks at the current position call mouse click //double clicks at the curr ...

  10. 使用pymouse库模拟鼠标操作,做一些简单游戏辅助

    最近在玩爱江山更爱美人,里面不少地方可以使用pymouse库模拟鼠标操作 帮助做一些重复简单的任务 pymouse库的安装 使用方法,可以看一下代码 一.钓鱼 #将窗口放在右上角 #x,y 为开始im ...

最新文章

  1. ASP.NET页面包含另外一个页面
  2. jdk1.8api中文版下载(帮助文档)
  3. PrimeFaces Extensions中的全新JSF组件
  4. linux下tomcat8安装
  5. ZeroForums论坛正式开始测试运行
  6. 思科ccnp认证网络工程师关于NAT64协议概述一定要看
  7. cygwin安装apt-cyg
  8. 星界边境联机服务器未响应,星界边境Starbound联机注意事项
  9. 【云原生|中间件】我们为什么要使用DCM?
  10. JVM(五)JVM调优
  11. 【笔记】html 图片映射 usemap(vue环境下、map、area、coords)
  12. 极客Go云监工 --- 开源前序
  13. 用svg画一个微信订阅号的图标
  14. win10键盘全部没反应_如何处理 win10系统惠普14q-bu101TX改win7的恢复教程 -win10使用教程...
  15. python双星号什么运算_Python的星号(*)和双星号(**)用法
  16. AIX 如何在 IBM AIX 上配置 YUM 并创建本地存储库
  17. Unparsed aapt error(s)! Check the console for output解决方法
  18. NX二次开发-调NX的dxfdwg.exe转换器导出dxf,dwg
  19. 国有公房公租房管理系统源代码(vs2015+sql2008)
  20. 《SaltStack技术入门与实践》—— 实践案例 中小型Web架构1 初始化和Haproxy

热门文章

  1. C语言计算5+55+555+5555+55555
  2. HTML网页中插入视频的方法
  3. mysql select having_MySQL中SELECT子句WHERE和HAVING的区别
  4. RandomResizedCrop
  5. mysql时间戳是什么意思_mysql中TIMESTAMP时间戳详解
  6. php5 geoip,php5.2 geoip pecl模块安装
  7. 力扣刷题-单链表两数相加
  8. java查询个人信息_java实例之查询个人信息
  9. 数字滚动效果(number-flip)
  10. 接口报错500是什么意思_网页打开显示错误500是什么意思