procedure TForm1.Button1Click(Sender: TObject);
var
  si : STARTUPINFO;
  pi : TProcessInformation;
  vBool:Boolean;
begin
  FillChar(si, SizeOf(si), 0);
  si.dwFlags := STARTF_USESHOWWINDOW;
  si.wShowWindow := SW_Hide;
  vBool:=CreateProcess( nil,'D:\Project1.exe',nil,nil,true,0,nil,nil,si,pi );  if not vBool then
    Exit;  WaitForSingleObject( pi.hProcess, 1000);  {其它处理代码...}  CloseHandle( pi.hProcess );
  CloseHandle( pi.hThread );
end;
Project1.exe 无任何代码
si.wShowWindow := SW_Hide;不起作用的
死活都不帮我把Project1窗口给隐藏起来???

解决方案 »

  1.   

    试试:
    vBool:=CreateProcess( 'D:\Project1.exe',nil,nil,nil,true,0,nil,nil,si,pi );
    在我的系统下成功。(win7+D2010)
    如果是你原有的程序,直接报错。
    另外:si.wShowWindow := SW_Hide可以不写,因为SW_Hide=0
    不过原来我也是写成你原有的,在BCB下成功。参见:
    http://topic.csdn.net/t/20050326/17/3883795.html
      

  2.   

    SW——Hide似乎是个BUG,以前也用过,不成功
    另外,根据某些说法,Hide的意思是不显示当前窗口,并激活其他窗口,也就相当于是最小化了窗口   
      并且不能通过点击来再restore出来   
        
      而visible   则是可视   
        
      所以如果你在程序过程中,要想真正隐藏窗口的话,   
      就设置visible   :=   false就可以了
      

  3.   

    wShowWindow只是传给新进程的一个参数,只有被加载的程序按照该参数来处理时才会有作用,实际上很多程序根本不理这个参数。
      

  4.   

      
      with si do begin
        cb := SizeOf(si);
        dwFlags := dwFlags or STARTF_USESHOWWINDOW;
        wShowWindow := SW_HIDE;
      end;
      

  5.   

    SDK:
    STARTF_USESHOWWINDOW:
    If this value is not specified, the wShowWindow member is ignored.