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

最近在项目中遇到一个有意思的现象,增加了自己对这几个函数调用的理解。大致描述场景如下。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);

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

 

 

已标记关键词 清除标记
相关推荐
可部署到云主机(Heroku,AWS……)! 使用dlib最先进的面部识别功能构建而成,具有深度学习功能。该模型在Wild标记的Labeled Faces中具有99.38%的准确度 。 这提供了一个简单的命令行工具,允许从命令行对图像文件夹进行面部识别! 1、找到图片中出现的所有面孔 2、获取每个人的眼睛,鼻子,嘴巴和下巴的位置和轮廓。 3、应用数字化妆 4、识别每张照片中出现的人物。 5、可以将此库与其他Python库一起使用来进行实时人脸识别。 使用要求 Python 3.3+或Python 2.7 macOS或Linux(Windows未正式支持,但可能有效) 人脸检测 在照片中找到面孔 在照片中找到面孔(使用深度学习) 使用GPU(使用深度学习)批量查找图像中的面孔 使用网络摄像头模糊实时视频中的所有人脸(需要安装OpenCV) 面部特征 识别照片中的特定面部特征 应用(可怕的丑陋)数字化妆 面部识别 根据已知人物的照片查找并识别照片中的未知面部 识别并在照片中的每个人周围绘制框 通过数字面部距离比较面部而不仅仅是真/假匹配 使用网络摄像头识别实时视频中的人脸 - 简单/慢速版本(需要安装OpenCV) 使用网络摄像头识别实时视频中的人脸 - 更快的版本(需要安装OpenCV) 识别视频文件中的面部并写出新的视频文件(需要安装OpenCV) 用相机识别Raspberry Pi上的脸部 运行Web服务以通过HTTP识别面部(需要安装Flask) 使用K近邻分类器识别面部
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页