使用SendMessage发送鼠标点击事件,为何需要发送两次

wfxyjx wfxyjx 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
为了测试使用SendMessage发送鼠标消息模拟鼠标点击,我做了一个测试程序,就一个对话框,中间一个按钮,点击后会弹出一个MessageBox,显示一句话“发生点击”。然后又写了另外一个程序,来给这个测试程序发送鼠标点击消息。代码如下:

HWND hand_game = FindWindow(NULL,TEXT("测试文件"));
HWND hand_button = FindWindowEx(hand_game,NULL,TEXT("Button"),TEXT("点击"));//得到按钮的句柄

SendMessage(hand_button,WM_LBUTTONDOWN,0,MAKELPARAM(46,12));
SendMessage(hand_button,WM_LBUTTONUP,0,MAKELPARAM(46,12));

上述代码是实现发送的程序中的一个按钮的响应代码,点击这个发送按钮后,发现测试程序中的按钮得到了焦点,但是为弹出MessageBox……再次点击发送消息的程序中的按钮,这次测试程序弹出了MessageBox,经测试发下,只有两次单击发送消息,或者将代码改成下面的样子:

HWND hand_game = FindWindow(NULL,TEXT("测试文件"));
HWND hand_button = FindWindowEx(hand_game,NULL,TEXT("Button"),TEXT("点击"));//得到按钮的句柄

SendMessage(hand_button,WM_LBUTTONDOWN,0,MAKELPARAM(46,12));
SendMessage(hand_button,WM_LBUTTONUP,0,MAKELPARAM(46,12));
//发送两次:
SendMessage(hand_button,WM_LBUTTONDOWN,0,MAKELPARAM(46,12));
SendMessage(hand_button,WM_LBUTTONUP,0,MAKELPARAM(46,12));

才能正常弹出MessageBox……用SPY++监视按钮得到的消息,发现结果都是正常的……小弟十分不解,望高手解释下!

平台:Visual C++6.0 Windows 7 Ultimate
...全文

相关推荐

c# 在WebBrowser中用SendMessage模拟鼠标点击

想在WebBrowser控件里面模拟鼠标点击,在百度上找了半天,怎么也找不到,还是google强大,在一个国外网站上找到的,代码比较清楚了,不做说明。

weixin_38701640

vb net 使用 sendMessage 如何输入鼠标坐标?

🏆本文收录于专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家!持续更新中,up!up!up!!

bug菌¹

C#中使用SendMessage

在C#中,程序采用了的驱动采用了事件驱动而不是原来的消息驱动,虽然.net框架提供的事件已经十分丰富,但是在以前的系统中定义了丰富的消息对系统的编程提供了方便的实现方法,因此在C#中使用消息有时候还是大大提高编程的效率的。  1 定义消息 在c#中消息需要定义成windows系统中的原始的16进制数字,比如 const int WM_Lbutton = 0x201; //定义了鼠标的左键点击消息 public const int USER = 0x0400 // 是windows系统定义的用户消息   2 消息发送    消息发送是通过windows提供的API函数SendMessage来实现

weixin_38736562

SendMessage之模拟按键

SendMessage之模拟按键,组合键,vb键盘模拟必不可少。

afangtxz

Delphi 模拟点击鼠标左键、右键和发送消息.rar

Delphi 模拟按键,将虚拟键转换为扫描码,模拟鼠标右键和左键以及发送消息的功能,Shift和Ctrl都定义了特殊的功能,一个简单的键盘鼠标模拟程序,适合Delphi初学者。比如模拟点击鼠标左键,具体的代码编写为:   begin    pt:= edit1.ClientToScreen( Point( 4,4 ));    SetCursorPos( pt.x, pt.y );    mouse_event( MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 );    mouse_event( MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 );    mouse_event( MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 );    mouse_event( MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 );   end;   还有模拟右键和发送消息等,请下载本源码详细查看。

weixin_39840650
评论 19
收藏 已收藏
分享
返回顶部
wfxyjx
VC/MFC 16,550 成员 421,606 内容