鼠标模拟的常用方案,包括发送鼠标事件消息和使用mouse_event系统函数,发送鼠标消息的例子如下:

pWnd->SendMessage(WM_RBUTTONDOWN,0,(y<<16)|x);

这种方法不需要窗体在前端,甚至最小化也可以使用,但是此方法并不是在所有场合有效,特别是对于不响应鼠标消息的程序更是如此。在这种情况下,可以尝试使用mouse_event函数。
首先给出mouse_event函数的原型:

VOID mouse_event(      DWORD dwFlags,DWORD dx,DWORD dy,DWORD dwData,ULONG_PTR dwExtraInfo
);

mouse_event有五个参数,第 一个为选项标志,为MOUSEEVENTF_LEFTDOWN时表示左键按下为MOUSEEVENTF_LEFTUP表示左键松开,向系统发送相应消息;第二、三个参数分别表示模拟鼠标对应x,y的位置,需要注意测是该参数对应的是屏幕坐标;第四、五个参数并不重要,一般也可设为0,0。若要得到Keybd_event和mouse_event函数的更详细的用法,可以查阅msdn。
mouse_even只能够发送前台消息,即仅对当前激活的窗体有效。最好配合SetCursorPos(x,y)函数一起使用,首先调用SetCursorPos函数设置鼠标位置到需要模拟鼠标操作的位置,然后调用mouse_event模拟鼠标操作,下面是关于mouse_event的示例代码:

POINT lpPoint;
GetCursorPos(&lpPoint); //获取鼠标位置
SetCursorPos(lpPoint.x, lpPoint.y);//设置鼠标位置
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

示例代码表示鼠标的双击,若要表示单击,用两个mouse_event即可(一次放下,一次松开)。

上面说明了模拟鼠标操作的两种常用方法,下面再给出一个综合实例进行阐述说明:

//在发送按键消息前需要设置下鼠标位置,扫雷程序似乎是根据鼠标位置
//确定点击的方块的,而不是鼠标消息的参数
//所以PostMessage在这里也不可以使用
::SetCursorPos(x,y);
//判断是否是雷,不是雷才执行鼠标点击动作
if(MineInf[acol*row+arow]==1){/*::mouse_event(MOUSEEVENTF_RIGHTDOWN,x,y,0,0);::mouse_event(MOUSEEVENTF_RIGHTUP,x,y,0,0);  */pWnd->SendMessage(WM_RBUTTONDOWN,0,(y<<16)|x);pWnd->SendMessage(WM_RBUTTONUP,0,(y<<16)|x);
}else{/*::mouse_event(MOUSEEVENTF_LEFTDOWN,x,y,0,0);::mouse_event(MOUSEEVENTF_LEFTUP,x,y,0,0);*/            pWnd->SendMessage(WM_LBUTTONDOWN,0,(y<<16)|x);pWnd->SendMessage(WM_LBUTTONUP,0,(y<<16)|x);
}   

VC模拟鼠标的两种方式(SendMessage、mouse_event)相关推荐

  1. 一篇文章带您区分GNSS欺骗模拟测试的两种方式

    写在前面 注意:提供的设备与案例.使用指南等指导性文件是为了在测试环境中对接收机的抗干扰能力进行验证,而非出于欺骗或干扰真实环境中的GNSS信号的目的!请确保通过线缆连接应用或暗室应用,若因为违规使用 ...

  2. 在思科三层交换机配置网关的两种方式

    随着交换技术的发展,三层交换机在网络汇聚层与核心层的应用越来越多.在内网中子网与子网之间的通讯越来越少依赖于路由(几乎见不到了),而是使用带有路由功能的三层交换机,这对于内网中子网之间的通信效率的提高 ...

  3. VC++等待光标的两种实现方式

    VC++等待光标的两种实现方式 有时候在做烦琐的工作时,希望鼠标处于忙状态,有两种简单的方法来实现: 1. 采用ApI函数,大多数采用此方法: BeginWaitCursor(); .....处理.. ...

  4. cesium两种方式鼠标移入移出实体显示提示框

    cesium两种方式鼠标移入移出实体显示提示框 第一种方式 采用cesium的label作为提示框 var labelEntity = viewer.entities.add({label : {sh ...

  5. Android中模拟点击的两种方式

    目前这两种方式,后面有的再继续添加. 1.当我们知道View的时候可以采用 view. performClick()方法 是使用代码主动去调用控件的点击事件(模拟人手去触摸控件) 2.点击也就是相当于 ...

  6. MAX31855电路和程序,实现SPI和软件模拟时序两种方式读取数据

    1. 概述 MAX31855为热电偶至数字输出转换器,内置14位模/数转换器(ADC).器件带有冷端补偿检测和修正.数字控制器.SPI兼容接口,以及相关的控制逻辑,在温度控制器.过程控制或监测系统中设 ...

  7. 两种方式实现css取消页面鼠标双击选中文字或单击拖动选中文字的效果

    问题描述 我们知道浏览器页面上的文字正常情况下我们是可以双击选中.或者单击鼠标横向拖动也能选中的,选中以后可以右击出现面板然后去复制什么的.但是有的时候,这种效果我们并不想要的,比如用户点快了的时候, ...

  8. java的websocket_java 实现websocket的两种方式实例详解

    一.介绍 1.两种方式,一种使用tomcat的websocket实现,一种使用spring的websocket 2.tomcat的方式需要tomcat 7.x,JEE7的支持. 3.spring与we ...

  9. java 实现websocket的两种方式

    简单说明 1.两种方式,一种使用tomcat的websocket实现,一种使用spring的websocket 2.tomcat的方式需要tomcat 7.x,JEE7的支持. 3.spring与we ...

  10. 实验四:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    贺邦+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的: 使用库函数 ...

最新文章

  1. 知名网站的 404 页面长啥样?
  2. Cadvisor源码分析监控项
  3. 百度步行导航加poi搜索android,【百度地图】带地图显示控件、导航控件、POI查找控件...
  4. .NET 6 新特性 WaitAsync
  5. DateTime.Now.Ticks.ToString()说明
  6. 注册.NET Framework
  7. 前后端分离工程实现 (VUE、JAVA)、附全部源码
  8. SqlServe零碎要点---sqlserver如何使用日期计算,DateTime类型的格式化以及语法格式等等。
  9. 5在ios上无法选取文件_无法在 Ubuntu 20.04 上安装 Deb 文件?这是你需要做的! | Linux 中国...
  10. 腾讯面试官这样问我二叉树,我刚好都会 | 原力计划
  11. python2.7对DICOM图像的读取
  12. 网站建设-学习笔记1-建站
  13. php私人云,PHP源码Cloudreve乐云网盘私人云盘源码 资源下载不限速功能
  14. 禁用计算机声卡设备,电脑声音被禁用了怎么办
  15. 怎么把多个excel表格合成一个_「Excel」合并多个表格,可以快速搞定啦
  16. Centos7 安装谷歌浏览器
  17. PT100热电阻简单介绍
  18. 影响ERP软件价格的要素有哪些?
  19. isFinite() 如果参数是 NaN,正无穷大或者负无穷大,会返回 false,其他返回 true
  20. java计算机毕业设计校园订餐系统源代码+数据库+系统+lw文档

热门文章

  1. 大家一起学电脑之硬件版
  2. win7电脑误删鼠标键盘驱动_重装win7系统后鼠标键盘无法使用解决方法
  3. Digester简介和使用
  4. 论文-公式对齐和右侧自动编号
  5. Jmeter使用HTTP代理服务器无法打开网页问题的解决方法
  6. (ECCV-2020)步态横向网络-GLN
  7. 扫码下载apk文件浏览器会直接打开并显示乱码的问题
  8. Power BI——数据建模案例分析
  9. 海康威视智能终端获取实时人脸体温识别记录二次开发java
  10. 社交网络的数据挖掘与分析,什么是社交网络分析