SendMessage, postmessage模拟鼠标左键

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SendMessage, postmessage模拟鼠标左键相关的知识,希望对你有一定的参考价值。

我想用sendmessage或者是postmessage模拟鼠标左键,点击一个窗口的指定位置,需要带坐标,窗口不是当前窗口,不能用MOUSE_EVENT之类的,只能用sendmessage或POSTMESSAGE,特别是需要带坐标,非常感谢,

SendMessage(hWnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(x, y));
SendMessage(hWnd, WM_LBUTTONUP, NULL, MAKELPARAM(x, y));
hWnd 是发送的目标控件句柄,x、y 是鼠标相对于该控件客户区左上角的坐标,如 0、0 就表示在目标句柄的控件左上方点击,而非屏幕坐标。
参考技术A sendmessage或POSTMESSAGE 模拟鼠标左键参数 是一样的
SendMessage(hwnd,WM_LBUTTOMDOWN,0,YX);//鼠标左键的按下
SendMessage(hwnd,WM_LBUTTOMUP,0,YX); //鼠标左键的抬起
hwnd 是窗口的句柄 (可以通过FindWindow的返回值得到)
YX 是指坐标的 (X,Y) 但是 y为高16位X为低16位 通过位运算来实现 (y<<16)+x

MFC发送自定义消息-PostMessage和SendMessage

PostMessage:把消息投放到线程的消息队列,不能消息被处理就立即返回
SendMessage:消息被处理完后才返回


几种发送消息的写法:
   ::PostMessage(GetSafeHwnd(), WM_USER_THREADEND, 0, 0); //GetSafeHwnd()表示得到当前窗口句柄,所以这条语句是发送给当前窗口
   GetParent()->PostMessage(WM_USER_THREADEND, 0, 0);//发送给父窗口 
   this->PostMessage(WM_USER_THREADEND, 0, 0);//发送给当前窗口

   HWND h= ::FindWindow(NULL, _T("窗口名字"));
   ::PostMessage(h, WM_PARASET, 0, 0);//发送给任意窗口

SendMessage也是同样的用法。

 

MFC发送自定义消息请参考:http://blog.csdn.net/penpenandtongtong/article/details/18598907

以上是关于SendMessage, postmessage模拟鼠标左键的主要内容,如果未能解决你的问题,请参考以下文章

delphi 中 postmessage 和sendmessage用法

sendmessage和postmessage的区别

消息与函数,postmessage与sendmessage,该怎么解决

sendmessage、postmessage和直接调用该对话框的方法,有何区别,那个好一点?

MFC SendMessage和PostMessage 区别

SendMessage和PostMessage的异同