我把窗体关闭后,可以用FindWindow方法,仍然可以获得到此窗体的句柄,是什么原因呢?
另外也尝试了IsWindow()的方法,也不一样不管用。
请求怎么判断窗体是否关闭掉呢?代码如下:
  procedure FindCurrForm(strCaption: string; isShow: Boolean);
  var
    bln: boolean;
  begin
    while true do
    begin
      Sleep(1000);
      Application.ProcessMessages;
      hwTemp := 0;
      hwTemp := FindWindow(nil, PAnsiChar(strCaption));//虽然窗体关闭了,但是仍然可以找得到句柄
      bln := IsWindow(hwTemp);
      if not isShow then
      begin
        if (hwTemp = 0) or (not bln) then
          Break;
      end
      else
      begin
        if (hwTemp <> 0) and (bln) then
         Break;
      end;
    end;
  end;

解决方案 »

  1.   

    你这里的“窗体关闭”是否仅仅close而没有free呢?这种情况下,用findwindow应当是可以找到的
      

  2.   

    设计期吧,找到的是设计器你的IDE里面的那个窗口的句柄
      

  3.   

    用程序找到的与spy++看到的对照就清楚了
      

  4.   

    现在需要用程序去判断窗体是否关闭的,哪怕是Close。是否可以通过程序找到窗体是否关闭,有什么办法吗?请各路大侠支招。
      

  5.   

    利用GetWindowTextA……找不到就证明窗体销毁了
      

  6.   

    OK
    问题基本上找到了,是由于窗体没有Free掉,导致一直可以找得到句柄。
      

  7.   

    procedure FindCurrForm(strCaption: string; isShow: Boolean); 
      begin 
          hwTemp := FindWindow(nil, PAnsiChar(strCaption));
          if hwTemp = 0  then 
            ShowMessage('窗口销毁')
          else
            if not IsWindowVisible(hwTemp) then 
              ShowMessage('窗口关闭,但未销毁!')
            else
              ShowMessage('窗口在显示!')
      end;
      

  8.   

    窗口close仅仅是关闭显示而不是销毁,此时实例依然存在,可以通过再次调用show来再次显示。
    而调用free则是销毁实例
    因此用FindWindow来判断是否销毁实例,用IsWindowVisible来判断是否关闭。
    同时应注意delphi打开工程时总是要产生一个关闭的实例,即使你已经free了项目中的实例,也能找到一个关闭的窗口,因此试验时必须关闭工程,不能在delphi环境中运行判断程序