我的delphi程序A调用一个cmd下的B程序(B是Dos程序),A如何判断B已经执行完毕再接下来做其他工作?

解决方案 »

  1.   

    转自猛料
    执行一个外部程序,并等待它完成
    Function WinExecExW(cmd,workdir: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
       result:=0
     else
     begin
       waitforsingleobject(processinfo.hProcess,INFINITE);
       GetExitCodeProcess(ProcessInfo.hProcess,Result);
     end;
    end;
      

  2.   

    首先用CreateProcess来执行这个程序,获得进程执行的详细信息,然后通过waitforsingleobject等待结束。
      

  3.   

    正解,详细的内容可以看《windows核心编程》
      

  4.   

    看看菜鸟级的解决方案:
    修改dos程序(或者是批处理文件),开始运行的时候建立一个标记文件,执行完毕以后删除这个标记文件,主程序就一直监控这个标记文件是否存在就行了!
      

  5.   

    sdzeng(大头鸟) 的方法可行
        其实要控制外部程序,可以用API函数CreateProcess,它的详细用法可以查看MSDN.
        CreateProcess函数可以监控由它打开的程序的运行情况,如DOS程序运行显示的信息我们可以将他添加到我们的Memo控件中,这样我们就不用打开DOS窗口,这也是很多DOS程序GUI界面话的方法。