博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VC模拟鼠标的两种方式(SendMessage、mouse_event)
阅读量:5751 次
发布时间:2019-06-18

本文共 1561 字,大约阅读时间需要 5 分钟。

鼠标模拟的常用方案,包括发送鼠标事件消息和使用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只能够发送前台消息,即仅对当前激活的窗体有效。t最好配合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程序进行鼠标事件模拟的两种方案,读者可以根据实际情况选择使用。

转载于:https://www.cnblogs.com/wolly88/p/4278487.html

你可能感兴趣的文章
inner join on, left join on, right join on要详细点的介绍
查看>>
SAS vs SSD对比测试MySQL tpch性能
查看>>
Spring boot 整合CXF webservice 全部被拦截的问题
查看>>
Pinpoint跨节点统计失败
查看>>
【Canal源码分析】Canal Server的启动和停止过程
查看>>
机房带宽暴涨问题分析及解决方法
查看>>
iOS 绕过相册权限漏洞
查看>>
我的友情链接
查看>>
XP 安装ORACLE
查看>>
八、 vSphere 6.7 U1(八):分布式交换机配置(vMotion迁移网段)
查看>>
[转载] 中华典故故事(孙刚)——19 万岁
查看>>
修改hosts文件里面的主机名,oralce asm无法启动
查看>>
Maven学习总结(十)——使用Maven编译项目gbk的不可映射问题
查看>>
php5编译安装常见错误和解决办法集锦
查看>>
Linux远程访问及控制
查看>>
MongoDB实战系列之五:mongodb的分片配置
查看>>
Unable to determine local host from URL REPOSITORY_URL=http://
查看>>
Java Tomcat SSL 服务端/客户端双向认证(二)
查看>>
java基础(1)
查看>>
ORACLE配置,修改tnsnames.ora文件实例
查看>>