1、我想调用一个外部程序,然后这个外部程序后台执行
等到这个后台执行的外部程序结束,给出程序完成的提示

解决方案 »

  1.   

    关键是你的这个外部程序该怎么写,可以用API使程序不在任务栏上显示,完成后,用APPLICATION.MESSBOX,提示后退出,
      

  2.   

    如果外部程序不需要等待输入,
    可以用下面代码:
    ========================
    转自超级猛料,
    执行一个外部程序并等待它完成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;
      

  3.   

    可以的,测试代码如下,稍微改了一下
    ==============================================
    Function WinExecExW(cmd,workdir:pchar;visiable:Word):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:=$ffff
     else
     begin
       waitforsingleobject(processinfo.hProcess,INFINITE);
       GetExitCodeProcess(ProcessInfo.hProcess,Result);
     end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
        r : DWORD;
    begin
        r := WinExecExW('COMMAND.COM /C COPY C:\aaa.txt D:\','',SW_HIDE);
        if r=0 then
        Application.MessageBox('运行完毕','',MB_OK);
    end;