打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
mouse_event的鼠标点击事件 和 使用PostMessage或者SendMessage发送的鼠标点击事件有何区别

本文链接:https://blog.csdn.net/hdy_ylmb/article/details/82949804

最近在项目中遇到一个有意思的现象,增加了自己对这几个函数调用的理解。大致描述场景如下。A程序的主窗口下有个控件,我要在B程序中模拟鼠标点击该控件。

在B程序中,首先使用的是给控件发鼠标点击事件,大致代码如下,其中hwnd就是该控件的句柄。这种做法也很明确可以实现点击该控件的效果。

PostMessage(hwnd, WM_LBUTTONDOWN, NULL, MAKELONG(5, 5));

Sleep(10);

PostMessage(hwnd, WM_LBUTTONUP, NULL, MAKELONG(5, 5));

但是后来,尝试着将hwnd换成了主窗口的句柄,模拟给这个主窗口的该控件的坐标发鼠标点击消息。却发现毫无效果。

PostMessage(hwnd, WM_LBUTTONDOWN, NULL, MAKELONG(300, 300));

Sleep(10);

PostMessage(hwnd, WM_LBUTTONUP, NULL, MAKELONG(300, 300));

这个原因是为什么呢。后来用Spy++抓主窗口的消息。当鼠标点击在该控件上时候,有一堆其他的windows消息辅助着实现这个控件的点击。而当用B程序去发送消息的时候,只能捕获到简单的鼠标落下和抬起事件,中间的转发啊聚焦啊激活消息一个没有。由此可以看出,通过PostMessage或者SendMessage发送消息的方式实现B程序对A程序某界面某控件的点击,只是简单调用了该句柄下的消息回调函数而已。之所以给具体控件发送点击事件有效,因为在A程序的代码中,有对鼠标点击事件的逻辑处理。发送该消息,A程序就进入了该控件的消息处理回调函数中。

讲了PostMessage和SendMessage发送的鼠标事件,接下来再看看mouse_event。众所周知,鼠标,键盘等外设接入主机,实际就相当于接入了IO设备。而mouse_event事件,则不是简单的发消息。它是向I/O队列插入鼠标事件。

比如上面的我给主窗口发送该控件位置的点击事件无效果的情况下,可以通过如下方式来模拟人工用鼠标点击该位置。    SetCursorPos(300, 300);

 mouse_event(MOUSEEVENTF_LEFTDOWN|MOUSEEVENTF_LEFTUP,300,300,0,0);

这样就实现了模拟人工点击该控件的效果。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
directinput 鼠标 模拟
python和pywin32实现窗口查找、遍历和点击
GetMessage(), PeekMessage(), PostMessage(), SendMessage()
SendMessage(hwnd,WM_QUIT,0,0); 为啥不好使
C语言windows.h库的常用函数(一)
鼠标移动窗体或控件
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服