用CreateProcess运行程序,然后用下面的语句等待其结束
    WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
    GetExitCodeProcess(ProcessInfo.hProcess,Result);

解决方案 »

  1.   

    我记得CreateProcess里有一个标志可以的。
    var
      CmdLinePChar:array[0..120] of char;
      StartUpInfo:TStartUpInfo;
      ProcessInfo:TProcessInformation;if CreateProcess(nil,CmdLinePChar,nil,nil,True,0,nil,nil,StartUpInfo,ProcessInfo) then
        begin
          WaitForSingleObject(Processinfo.hProcess,INFINITE);
        end看行不行
      

  2.   

    就是 raptor(猛禽) 的方法啊。不过可以改进一下,否则时间长了,用户
    以为程序已经死了。用CreateProcess运行程序,然后用下面的语句等待其结束
    while not Application.Terminated and WaitforSingleObject 
        (ProcessInfo.hProcess,0) = WAIT_OBJECT_0
    begin
        Sleep(10);
        Application.ProcessMessages;
    end;
      

  3.   

    使用createprocess函数创建进程调用应用程序,同时使用waitforsignleobject等待进程结束。在此处理所给为32位版本。functionExecAndWait(constFilename,Params:string;WindowState:word):boolean;varSUInfo:TStartupInfo;ProcInfo:TProcessInformation;CmdLine:string;beginCmdLine:=filename '' params;FillChar(SUInfo,SizeOf(SUInfo),#0);withSUInfodobegincb:=SizeOf(SUInfo);dwFlags:=STARTF_USESHOWWINDOW;wShowWindow:=WindowState;end;Result:=CreateProcess(NIL,PChar(CmdLine),NIL,NIL,FALSE,CREATE_NEW_CONSOLEorNORMAL_PRIORITY_CLASS,NIL,PChar(ExtractFilePath(Filename)),SUInfo,ProcInfo);ifResultthenbegin//等待应用程序结束WaitForSingleObject(ProcInfo.hProcess,INFINITE);//删除句柄CloseHandle(ProcInfo.hProcess);CloseHandle(ProcInfo.hThread);end;end;===========================================================★CSDN助手.Net1.0★功能简介:1、真正离线浏览,智能缓存,自动更新本地数据库,也能一次性下载论坛所有帖子,速度飞快。2、强大的搜索功能,能进行“标题”,“全文”及“作者”关键字搜索。3、帖子更新自动监测提醒(在线等待的时候不用不停的刷新帖子了)。4、分类收藏夹,可以非常方便的进行精华帖子本地典藏。5、可以选择保存用户名和密码,自动登录。6、方便的发贴和回复(可以群发)。7、自由设计个性签名。8、帖子内的Web连接自动探测,点击直接打开外部浏览器。9、可以自由设置帖子查看区的字体,颜色,背景。10、个人专区(我的帖子列表,我参与的帖子列表)。下载地址:http://www25.brinkster.com/nluyan/release1.zip
      

  4.   

    嘿,老朋友,给你贴上个完整的函数,试试吧!
    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;
    begin
    StrPCopy(zAppName,FileName);0D
    GetDir(0,WorkDir);
    StrPCopy(zCurDir,WorkDir);
    0AFillChar(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;
    //下面是用法:
    WinExecAndWait('NotePad.exe',SW_Normal);