: slfh(丝路飞鸿) 
还不知道吗?

解决方案 »

  1.   

    试试这个
    function WinExecAndWait32(FileName:string;visibility:Integer):integer;
    var
      zAppName:array[0..512] of char;
      zCurDir:array[0..255] of char;
      workDir:string;
      startUpInfo:TStartupInfo;
      ProcessInfo:TProcessInformation;
      i:DWord;
    begin
      StrPCopy(zAppName,FileName);
    //  GetDir(0,WorkDir);
    //  showmessage(workdir);
    //  StrPCopy(zCurDir,WorkDir);
      FillChar(StartupInfo,sizeof(StartUpInfo),#0);
      StartupInfo.cb:=sizeOf(StartUpInfo);  StartUpInfo.dwFlags:=STARTF_USESHOWWINDOW;
      StartUpInfo.wShowWindow:=Visibility;//  winExec(zAppName,Visibility);  if not CreateProcess(nil,zAppName,nil,nil,false,
        CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,
        nil,nil,StartupInfo,ProcessInfo ) then
        Result:=-1
      else begin
        WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
        GetExitCodeProcess(ProcessInfo.hProcess,i);
        Result:=i;
      end;
    end;
      

  2.   

    我给你一段代码:
    function WinExecWait(Path:String;Visibility:word):Word;
    var
      InstanceID:Thandle;
      Pchar_Path;//将路径转换成PChar型
    begin
      Pchar_Path:=PChar(Path);
      InstanceId:=WinExec(Pchar_Path,Visibility);//开始执行外部程序
      if InstanceId < 32 then //小于32说明执行错误
        WinExecWait:=InstanceId
      else begin
        Repeat
          Application.ProcessMessage;
        Until Application.Terminated or (GetModuleUsage(InstanceId)=0);//直到外部程序结束
        WinExecWait:=32;
      end;
    end;