vc模拟鼠标操作

来源:互联网 发布:什么是软件销售 编辑:程序博客网 时间:2024/05/21 22:53

VC模拟鼠标操作(SendMessage、mouse_event)

2012-03-18 23:26:52|5758次阅读|上传:wustguangh【已有0条评论】发表评论

<iframe id="iframeu1591084_0" src="http://pos.baidu.com/acom?rdid=1591084&amp;dc=2&amp;di=u1591084&amp;dri=0&amp;dis=0&amp;dai=2&amp;ps=342x217&amp;dcb=BAIDU_UNION_define&amp;dtm=BAIDU_DUP_SETJSONADSLOT&amp;dvi=0.0&amp;dci=-1&amp;dpt=none&amp;tsr=0&amp;tpr=1456042133375&amp;ti=VC%E6%A8%A1%E6%8B%9F%E9%BC%A0%E6%A0%87%E6%93%8D%E4%BD%9C(SendMessage%E3%80%81mouse_event)&amp;ari=1&amp;dbv=2&amp;drs=1&amp;pcs=1366x517&amp;pss=1366x353&amp;cfv=0&amp;cpl=41&amp;chi=1&amp;cce=true&amp;cec=UTF-8&amp;tlm=1456042133&amp;ltu=http%3A%2F%2Fvcsos.com%2Farticle%2FpageSource%2F120318%2F20120318112652.shtml&amp;ecd=1&amp;psr=1366x768&amp;par=1366x706&amp;pis=-1x-1&amp;ccd=24&amp;cja=true&amp;cmi=111&amp;col=zh-CN&amp;cdo=-1&amp;tcn=1456042133&amp;qn=473917fee7d9d48e&amp;tt=1456042133349.111.359.369" width="468" height="15" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" style="border:0; vertical-align:bottom;margin:0;" allowtransparency="true"></iframe>

关键词:C/C++, 操作系统|来源:唯设编程网

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

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

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

?
1
2
3
4
5
6
7
8
VOID mouse_event(      
 
    DWORD <i>dwFlags</i>,
    DWORD <i>dx</i>,
    DWORD <i>dy</i>,
    DWORD <i>dwData</i>,
    ULONG_PTR <i>dwExtraInfo</i>
);

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的示例代码:

?
1
2
3
4
5
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即可(一次放下,一次松开)。

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//在发送按键消息前需要设置下鼠标位置,扫雷程序似乎是根据鼠标位置
//确定点击的方块的,而不是鼠标消息的参数
//所以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程序进行鼠标事件模拟的两种方案,读者可以根据实际情况选择使用。

<iframe id="iframeu1589421_0" src="http://pos.baidu.com/acom?rdid=1589421&amp;dc=2&amp;di=u1589421&amp;dri=0&amp;dis=0&amp;dai=3&amp;ps=1475x181&amp;dcb=BAIDU_UNION_define&amp;dtm=BAIDU_DUP_SETJSONADSLOT&amp;dvi=0.0&amp;dci=-1&amp;dpt=none&amp;tsr=0&amp;tpr=1456042133375&amp;ti=VC%E6%A8%A1%E6%8B%9F%E9%BC%A0%E6%A0%87%E6%93%8D%E4%BD%9C(SendMessage%E3%80%81mouse_event)&amp;ari=1&amp;dbv=2&amp;drs=1&amp;pcs=1349x517&amp;pss=1349x1585&amp;cfv=0&amp;cpl=41&amp;chi=1&amp;cce=true&amp;cec=UTF-8&amp;tlm=1456042133&amp;ltu=http%3A%2F%2Fvcsos.com%2Farticle%2FpageSource%2F120318%2F20120318112652.shtml&amp;ecd=1&amp;psr=1366x768&amp;par=1366x706&amp;pis=-1x-1&amp;ccd=24&amp;cja=true&amp;cmi=111&amp;col=zh-CN&amp;cdo=-1&amp;tcn=1456042134&amp;qn=3b3383abf634a487&amp;tt=1456042133349.214.561.562" width="728" height="90" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" style="border:0; vertical-align:bottom;margin:0;" allowtransparency="true"></iframe>
【发表评论0条 】
上一篇:VC对话框程序响应时间消息(WM_TIMER)下一篇:VC编程实现交互式截屏的MFC DLL(一)
-
网友评论(共0条评论)..
VC模拟鼠标操作(SendMessage、mouse_event)

暂时没有评论..

第一页上一页下一页最末页
发表评论/共0条评论..

你还没有登录,请先登录
请您注意
·自觉遵守:爱国、守法、自律、真实、文明的原则
·尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法规
·严禁发表危害国家安全,破坏民族团结、国家宗教政策和社会稳定,含侮辱、诽谤、教唆、淫秽等内容的作品
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·您在VC编程网评论发表的作品,VC编程网有权在网站内保留、转载、引用或者删除
·参与本评论即表明您已经阅读并接受上述条款
0 0