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);

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

 

 

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据引用中提到的情景模式,"SCENE_MODE_NIGHT"是相机支持的夜景模式。根据引用中的描述,当相机设置为"USE_SCENE_MODE"时,必须使用"ANDROID_CONTROL_SCENE_MODE"来确定3A算法的行为。对于"SCENE_MODE_NIGHT",HAL可能会倾向于使用连续对焦(AF)模式,以便在夜间场景下获得更好的焦点。此外,在"SCENE_MODE_FACE_PRIORITY"下,AE/AWB/AF模式的工作方式与在"ANDROID_CONTROL_MODE_AUTO"模式下相同,但3A算法会倾向于进行测光,并对焦于已检测到的人脸。 因此,"SCENE_MODE_NIGHT"是相机的夜景模式,可以在夜间场景下获得更好的焦点。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span> #### 引用[.reference_title] - *1* *2* *3* [android中Camera获取系统支持的情景模式](https://blog.csdn.net/weixin_35899510/article/details/117764760)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *4* [Android Camera 3A 模式和状态转换](https://blog.csdn.net/haiping1224746757/article/details/106472497)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值