向指定另一窗口发送鼠标单击消息,wi.hWnd已经正确获取,发送WM_CLOSE消息每次都能够正确关闭窗口就是验证,但是不知道为什么前面发送的鼠标左键单击事件总是没有反应,哪位大大能够给看看代码,指出错误,不胜感激.
POINT lpPoint;
::GetCursorPos(&lpPoint);
long pos=lpPoint.y;
pos+=pos*65536+lpPoint.x;
SendMessage(wi.hWnd,WM_LBUTTONDOWN,MK_LBUTTON,pos);
SendMessage(wi.hWnd,WM_LBUTTONUP,MK_LBUTTON,pos);
Sleep(5000);
PostMessage(wi.hWnd,WM_CLOSE,NULL,NULL);
POINT lpPoint;
::GetCursorPos(&lpPoint);
long pos=lpPoint.y;
pos+=pos*65536+lpPoint.x;
SendMessage(wi.hWnd,WM_LBUTTONDOWN,MK_LBUTTON,pos);
SendMessage(wi.hWnd,WM_LBUTTONUP,MK_LBUTTON,pos);
Sleep(5000);
PostMessage(wi.hWnd,WM_CLOSE,NULL,NULL);
试试.
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
又试了下这个,这样是可以实现鼠标单击,前提是目标窗口必须在最前,这说明坐标是没有错的
GetCursorPos(&pt);
ScreenToClient(wi.hWnd, &pt);SendMessage(wi.hWnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(pt.x, pt.y));
POINT lpPoint;
::GetCursorPos(&lpPoint);
ScreenToClient(wi.hWnd, &lpPoint);
SendMessage(wi.hWnd,WM_LBUTTONDOWN,MK_LBUTTON,MAKELONG(lpPoint.x, lpPoint.y));
SendMessage(wi.hWnd,WM_LBUTTONUP,MK_LBUTTON,MAKELONG(lpPoint.x, lpPoint.y));但是还是不行啊,哎
//你确定这时鼠标已在该窗口的指定位置上吗?注:如果是鼠标的位置停留在窗口的某个控件(如button)上,则发送该消息不会有任何反应。
因为这时窗口根本就不会去处理WM_LBUTTONDOWN/WM_LBUTTONUP消息,而是处理WM_COMMAND。
你可以试试发送右键消息到记事本,同样不处理的,必须得到其子窗口,Edit控件的句柄才行。