用sendmessage发送wm_close wm_destroy wm_quit 均不能关闭该弹窗。由于是主程序的一个弹窗,所以不能关闭进程。postmessage(hwnd, WM_SYSCOMMAND, SC_CLOSE,0)也不能关闭。求大家支个招。

解决方案 »

  1.   

    你的窗口句柄是怎么记录的?能保证就是目标窗口的吗?如果目标窗口名称可以确定,可以从Screen.Forms里面去找,找到后,再用Form.Handle.......
      

  2.   

    回二楼 :
    窗口句柄是我用GetForegroundWindow获得的,和我用spy++获得的一样。以前处理这个程序的弹窗,Sendmessage(hwnd,WM_CLOSE,0,0);就可以了。现在升级了,不能关闭这个弹窗了。我怀疑是截获了我的消息,不给调用wm_close。有什么办法能强制关闭吗?就一个小小的弹窗!
      

  3.   

    模拟关闭罗, 即KEYEVENT去操作
      

  4.   

    用spy++测句柄,spy++消息里边的关闭也不能关闭,只能最小化和最大化,这算是什么技术呢?防止被关窗口?
      

  5.   

    sendmessage和postmessage两个api函数
      

  6.   

    sendinput
    keybd_event
    mouse_event
    鼠标或键盘模拟试试看
      

  7.   

    实在不行就用sendmessage坐标点击吧
      

  8.   

    procedure kissHWND(const h:HWND);
    var
      hProcess:thandle;
    begin
      if IsWindow(h)=false then exit;
      GetWindowThreadProcessId(h,@p); //取窗口ID 
      hProcess:=OpenProcess(PROCESS_ALL_ACCESS,FALSE,p);//将ID转为进程句柄
      TerminateProcess(hProcess,0); //由句柄杀死进程。
      CloseHandle(hProcess);
    end;代码如上,调用这个过程时,传一个句柄,即将该句柄所对应的窗口关闭。
      

  9.   

    方法 二:procedure kissh(const h:hwnd);
    var
      r:TRect;
      xy:TPoint;
    begin
    GetWindowRect(h,r);
        if r.right=GetSystemMetrics(0) then exit;      xy.x := r.right-12;
          xy.y := r.top +12;
          SetCursorPos(xy.x,xy.y);
          mouse_event(MOUSEEVENTF_LEFTDOWN,xy.x,xy.y,0,0);
    end;