是这样的2个程序 
  一个 P_main.exe   P_popup.exe 
  流程是 
   1、 在P_main.exe启动时 WinExec(pchar(P_popup.exe'), 0);   
      (P_popup.exe上用了CoolTrayIcon1控件,在启动时将程序最小化到任务栏中。) 
   2、P_main.exe窗体上放置一个showwindow按键,点击它的时候 ShowWindow(P_popupH,SW_SHOWNORMAL);//P_popupH为P_popup.exe程序句柄 
   3、在P_popup.exe程序上有个“隐藏”按键,点击时 Application.Minimize; 将程序最小化到任务栏中。 问题1:showwindow时 P_popup.exe程序不在最上层,我要在这个时候把它变成当前的操作窗体。 
问题2:显示第一次后,点隐藏键好用,再showwindow 再点隐藏键时,无效。没有反应的了。  
我应该怎么解决,请大虾指点一下 ?

解决方案 »

  1.   

    关于问题1:
    SetForegroundWindow(P_popupH)
    可以把窗口提至前台问题2:
    要看你具体的代码了
      

  2.   


    //---主程序代码-----------
    procedure TF_main.Button2Click(Sender: TObject);
    var
      P_popupH:THandle;
    begin
    //--------得到窗体句柄 并显示出来------
      P_popupH:=FindWindow(nil,'F_popupH');  if (P_popupH>0) then
          //------显示可执行文件------
           ShowWindow(P_popupH,SW_SHOWNORMAL);
    end;
    ----------------------------------------------------------------//P_popup隐藏按键代码 
    procedure TF_popup.Button3Click(Sender: TObject);
    begin
     Application.Minimize;
    end;
      

  3.   

    用了2楼说的方法 
    procedure TF_main.Button2Click(Sender: TObject); 
    var 
      P_popupH:THandle; 
    begin 
    //--------得到窗体句柄 并显示出来------ 
      P_popupH:=FindWindow(nil,'F_popupH');   if (P_popupH>0) then
     begin 
          //------显示可执行文件------ 
          ShowWindow(P_popupH,SW_SHOWNORMAL); 
          SetForegroundWindow(P_popupH);
      end;
    end;显示出来的程序 看不到窗体里的控件,白板 一块
      

  4.   

    CoolTrayIcon1是有问题,我也试过了,不过,我也没有去深究,换了一个控件就好了.
      

  5.   

    别用ShowWindow,自己定义一个消息在P_popup.exe中处理(还原窗体)
    P_main.exe给那个窗体发消息
      

  6.   


    const
      WM_SHOWME=WM_User+1002; 
    procedure TF_PhoneCZ.ExeShowme(var vmsg: Tmessage);
    var
      sqlstr:string;
    begin
      application.Restore ;{
    ........
    }  // showmessage('1000 liuzhenbin');
    end;