再问:SendMessage向其他窗口发送鼠标消息[100分,测试成果立付]
xill 2009-05-31 03:32:46 通过一个窗口程序向另外一个窗口程序发送鼠标左键点击消息。
我做了两个窗口程序AAA,BBB:
AAA:一个dlg窗口,在窗口坐标(100,100)处放了一个button_aaa,同时在on_button_aaa响应函数里面有一个MessageBox("OK!!!");函数
BBB:也是一个dlg窗口,上面有两个button:button_bbb1,button_bbb2。在on_button_bbb1里面已实现如下功能
找到AAA窗口的句柄,将鼠标移动到AAA窗口坐标(100,100)处,点击鼠标,弹出对话框“OK!!!”。
现须要写一个button_bbb2的响应函数on_button_bbb2。用sendmessage实现鼠标点击AAA窗口坐标(100,100)的功能,点击完成后AAA窗口弹出“OK!!!”对话框。
============================================================================
on_button_bbb1实现代码如下,已经测试通过,请务重复,请提供一下on_button_bbb2的代码,要求用sendmessage实现:
//另外我翻看了论坛上这一块的关于SendMessage的问题,也试了很多次,没有成功,请达人帮助。
on_button_bbb1()
{
//g_DstWnd是AAA窗口的句柄
static BOOL flag=FALSE;
CRect crect;
::GetWindowRect(g_DstWnd,crect);
int w=crect.Width();
int h=crect.Height();
if (flag==FALSE)
{
::MoveWindow(g_DstWnd,0,0,w,h,TRUE);//为了保障测试把窗口移动到(0,0)
flag=TRUE;
}
RECT rc;
int x, y;
::GetWindowRect(g_DstWnd,&rc);
x = rc.left+100;
y = rc.top+100;
::SetCursorPos(x,y);
::mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
::mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
}
============================================================================
我写的on_button_bbb2(),无法实现点击功能(我怀疑,是不是直接点到窗体上去了,而不是点的button_aaa)
另外说明,不希望通过得到button_aaa的句柄去做鼠标点击:
on_button_bbb2()
{
::SetForegroundWindow(g_DstWnd);//激活
CRect crect;
::GetWindowRect(g_DstWnd,crect);
int w=crect.Width();
int h=crect.Height();
::MoveWindow(g_DstWnd,0,0,w,h,TRUE);//移动
Sleep(200);
::SendMessage(g_DstWnd,WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(100,100));
Sleep(200);
::SendMessage(g_DstWnd,WM_LBUTTONUP,MK_LBUTTON,MAKELONG(100,100));
}