如何判断用shellexecute调用一个外部程序是否已经执行完毕?

解决方案 »

  1.   

    别用ShellExecute, 改用CreateProcess
      

  2.   

    to westfly(西翔) 
       CreateProcess这个怎么用呀
      

  3.   

    function WinExecAndWait(FileName:String; Visibility : Integer):Thandle;
    var
      zAppName:array[0..512] of char;
      zCurDir:array[0..255] of char;
      WorkDir:String;
      StartupInfo:TStartupInfo;
      ProcessInfo:TProcessInformation;  RetCode: DWORD;
    begin
      StrPCopy(zAppName,FileName);
      GetDir(0,WorkDir);
      StrPCopy(zCurDir,WorkDir);
      FillChar(StartupInfo,Sizeof(StartupInfo),#0);
      StartupInfo.cb := Sizeof(StartupInfo);
      StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
      StartupInfo.wShowWindow := Visibility;  if not CreateProcess(nil,
                           zAppName,
                           nil,
                           nil,
                           false,
                           CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,
                           nil,
                           nil,
                           StartupInfo,ProcessInfo) then
      begin
        Result :=0;
        exit;
      end
      else
      begin
        WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
        GetExitCodeProcess(ProcessInfo.hProcess,Result);
      end;
    end;Demo:WinExecAndWait('c:\project1.exe', SW_HIDE);