在使用SetForegroundWindow(handle);时,会把目标窗口移到前台显示,但是这样进行以后,会导致前台显示的目标程序暂时无法进行最小化,用什么办法可以解决这个问题?

解决方案 »

  1.   

    SetForegroundWindow(handle);
    SetWindowPos(handle,HWND_TOP,0,0,0,0,SWP_NOSIZE or SWP_NOMOVE or SWP_SHOWWINDOW);还不能动吗?
      

  2.   

    弄不出来... - -
    想知道是怎么create的(Self?nil?),怎么show的...
      

  3.   

    没有create,我的程序和那个外部程序都运行着。外部程序还在桌面上,都没有最小化,就算最小化,也是一样的
      

  4.   

    确实会有这个问题第一次是可以的,后面的就不行了,楼主下面的链接应该可以找到答案
    http://topic.csdn.net/t/20040514/14/3067500.html
      

  5.   

    override窗体消息处理函数,用ShowWindow进行最小化可以解决这个问题,不过左下角地方会有一个小的框,procedure TForm1.WndProc(var Message: TMessage);
    begin
      if Message.Msg = WM_SYSCOMMAND then
      begin
        if Message.WParam = SC_MINIMIZE then
          ShowWindow(Self.Handle,SW_MINIMIZE)
        else
          inherited;
      end
      else
        inherited;
    end;
      

  6.   

    谢谢willflyz朋友费心,只是那个外部程序是别人的,不是我写的,所以无法把代码加进去。之前我说没找到答案也正是这个原因
      

  7.   

    这段时间实在是太无聊了,拿着这个问题又研究了一下
    先把我测试成功的代码贴出来,然后再讲过程,发现了一些很奇怪的东西  handle:=FindWindow(nil,'mainform');
      handle1:=GetLastActivePopup(handle);
      BringWindowToTop(handle1);
      if not IsWindowVisible(handle1) then
      begin
        handle2   :=   GetWindow(handle1,   GW_OWNER);
        if  handle2<>0 then
          handle1:=handle2;
        ShowWindow(handle1,SW_RESTORE);
      end
      else
      begin
        SetForegroundWindow(Handle1);
      end;首先我被楼主的问题所迷惑,以为问题出在SetForegroundWindow上面,测试一段时间后发现不对
    每次都是最小化后的窗口如果被显示出来,就会出现无法再最小化
    于是我用了if not Isiconic(handle1) then来判断窗口是否最小化
    结果居然发现Isiconic这个函数判断不对,我一下就晕了
    最后调出spy++来查看窗口,发现窗口最小化,delphi做的动作居然是隐藏窗口,太意外了,以前一直没有注意
    继续,把函数换成IsWindowVisible,判断没有问题,但是直接调用ShowWindow(handle1,SW_RESTORE);就会出现最小化的窗口恢复后无法再次最小化了
    想了老半天,查了查原来的程序,发现ShowWindow调用的应该是application的句柄而不是窗口的句柄
    于是又加了handle2   :=   GetWindow(handle1,   GW_OWNER);
        if  handle2<>0 then
          handle1:=handle2;再测试,OK有点乱,希望对你有帮助我回的是寂寞!
      

  8.   

    用SetWindowPos替换SetForegroundWindow函数
      

  9.   

    谢谢SuperTitan001,这份研究精神真让人感动
      

  10.   

    结贴了,再次谢谢SuperTitan001。