也就是调用一个外部的程序时如何等到它执行完了再执行下一行命令?? ?

解决方案 »

  1.   

    application.ProcessMessages;
      SHExecInfo.cbSize := sizeof(SHELLEXECUTEINFO);
      SHExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
      SHExecInfo.Wnd := application.Handle;
      SHExecInfo.lpVerb := nil;
      SHExecInfo.lpFile := 'WinRAR.exe';
      SHExecInfo.lpParameters := pchar('a '+ChangeFileExt(TheParm.filename,'.rar')+' '+ChangeFileExt(TheParm.filename,'.dmp'));
      SHExecInfo.lpDirectory := nil;
      SHExecInfo.nShow := SW_SHOW;
      SHExecInfo.hInstApp := application.Handle;
      ShellExecuteEx(@SHExecInfo);
      WaitForSingleObject(SHExecInfo.hProcess, INFINITE);
      closeHandle(SHExecInfo.hProcess);
      //删除原的文件;
      deletefile(TheParm.filename);
      

  2.   

    //执行文件并等侍其完成,函数;
    Function WinExecExW(cmd:pchar;visiable:integer):DWORD;
    var
     StartupInfo:TStartupInfo;
     ProcessInfo:TProcessInformation;
    begin
     FillChar(StartupInfo,SizeOf(StartupInfo),#0);
     StartupInfo.cb:=SizeOf(StartupInfo);
     StartupInfo.dwFlags:=STARTF_USESHOWWINDOW;
     StartupInfo.wShowWindow:=visiable;
     if not CreateProcess(nil,cmd,nil,nil,false,Create_new_console or Normal_priority_class,nil,nil,StartupInfo,ProcessInfo) then
     begin
        result:=0;
     end
     else
     begin
       waitforsingleobject(processinfo.hProcess,INFINITE);
       GetExitCodeProcess(ProcessInfo.hProcess,Result);
     end;
    end;