向指定另一窗口发送鼠标单击消息,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);

解决方案 »

  1.   

    GetCursorPos取得的应该是屏幕坐标吧,SendMessage参数里不也是屏幕坐标吗?
      

  2.   

    去掉: SendMessage(wi.hWnd,WM_LBUTTONUP,MK_LBUTTON,pos);
    试试.
      

  3.   

    试了一下,不行,一个完整的鼠标单击事件应该同时包括UP和DOWN吧
      

  4.   

    mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
    mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); 
    又试了下这个,这样是可以实现鼠标单击,前提是目标窗口必须在最前,这说明坐标是没有错的
      

  5.   

    SendMessage(wi.hWnd,WM_LBUTTONDOWN,MK_LBUTTON,pos);换成PostMessage()呢?
      

  6.   

    //SendMessage参数里用的是客户区坐标POINT pt;
    GetCursorPos(&pt);
    ScreenToClient(wi.hWnd, &pt);SendMessage(wi.hWnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(pt.x, pt.y));
      

  7.   

    按照你的提示,改了下代码
    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));但是还是不行啊,哎
      

  8.   

    ::GetCursorPos(&lpPoint); 
    //你确定这时鼠标已在该窗口的指定位置上吗?注:如果是鼠标的位置停留在窗口的某个控件(如button)上,则发送该消息不会有任何反应。
    因为这时窗口根本就不会去处理WM_LBUTTONDOWN/WM_LBUTTONUP消息,而是处理WM_COMMAND。
      

  9.   

    我的程序是利用CREATEPROCESS打开一个IE,然后得到新打开IE窗口的句柄,SLEEP 5秒,在这5秒里我把鼠标放在一个IE页面上的某一个超连接上,等着单击的操作,但是没有成功.
      

  10.   

    wi.hWnd不正确,是IE的hWnd,发送WM_CLOSE是可以关闭,但IE不处理WM_LBUTTONDOWN等消息,是由IE的控件处理。
    你可以试试发送右键消息到记事本,同样不处理的,必须得到其子窗口,Edit控件的句柄才行。
      

  11.   

    那应该取得ie哪个控件的hWnd呢?
      

  12.   

    我利用SPY++也得到这个控件的CLASS是"Internet Explorer_Server",但是我用EnumWindows来枚举所有进程ID为IE进程ID的窗口类名,却得不到这个类名,当然也得不到这个控件的窗口句柄,利用FINDWINDOW得到这个类名的窗口句柄得到的也是0,怎么样才能够得到这个窗口的句柄呢?我想这应该是关键点了
      

  13.   

    chehw的QQ或者MSN是多少,我想直接向您请教,能不能短消息发给我?不胜感激
      

  14.   

    问题已经解决了,通过findwindowex得到"Internet Explorer_Server"这个子窗口的句柄就OK,非常感谢chehw的指导,结帖