如何让Delphi调用外部程序并等待其运行结束

uses  

    Windows,   

    SysUtils,   

    Classes,   

    ShellAPI;   

  函数一:

function RunAndWait(FileName: string; Visibility: Integer): THandle;   

var  

    zAppName: array[0..512of Char;   

    zCurDir: array[0..255of Char;   

    WorkDir: string;   

    StartupInfo: TStartupInfo;   

    ProcessInfo: TProcessInformation;   

begin  

    try  

      StrPCopy(zAppName, FileName);   

      GetDir(0, WorkDir);   

      StrPCopy(zCurDir, WorkDir);   

      FillChar(StartupInfo, SizeOf(StartupInfo), #0);   

      StartupInfo.cb := SizeOf(StartupInfo);   

      StartupInfo.dwFlags := STARTF_USESHOWWINDOW;   

      StartupInfo.wShowWindow := Visibility;   

      if not CreateProcess(nil, zAppName, nilnilfalse, Create_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nilnil, StartupInfo, ProcessInfo) then  

      begin  

        result := 0;   

        Exit;   

      end  

      else  

      begin  

        WaitForSingleObject(ProcessInfo.hProcess, INFINITE);   

        GetExitCodeProcess(ProcessInfo.hProcess, result);   

      end;   

    finally  

    end;   

end;  

函数二

function WinExecAndWait32(FileName: string; Visibility: Boolean): integer;       

var      

  zAppName: array[0..512of char//存放应用程序名       

  StartupInfo: TStartupInfo;       

  ProcessInfo: TProcessInformation;       

  exitCode: Dword;       

  aVisibility: integer;       

begin      

  StrPCopy(zAppName, FileName);       

  FillChar(StartupInfo, Sizeof(StartupInfo), #0);       

  //给StartupInfo结构体赋值       

  StartupInfo.cb := Sizeof(StartupInfo);       

  StartupInfo.dwFlags := STARTF_USESHOWWINDOW;       

  if Visibility then      

    aVisibility := 1      

  else      

    aVisibility := 0;       

      

  StartupInfo.wShowWindow := aVisibility;       

  //调用CreateProcess 创建进程,执行指定的可执行文件       

  if not CreateProcess(nil, zAppName, nilnilfalse      

    , CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS       

    , nilnil, StartupInfo, ProcessInfo) then      

    Result := -1      

  else      

  begin      

    //等待可执行文件退出       

    WaitforSingleObject(ProcessInfo.hProcess, INFINITE);       

    //得到进程终止状态码       

    GetExitCodeProcess(ProcessInfo.hProcess, exitCode);       

    result := Exitcode;       

  end;       

end;  

其中 参数   Visibility 取值如下:

行号 参数 含义
1 SW_HIDE                        隐藏这个窗体,并激活其他窗体。
2 SW_MAXIMIZE                最大化指定的窗体。
3 SW_MINIMIZE                 最小化指定的窗体,并按顺序激活最上层的窗体。
4 SW_RESTORE               激活并显示窗体。如果窗体为最小化或者最大化,窗体恢复到原始大
                                          小和置。应用程序当恢复一个最小化的窗体时将指定标记。
5 SW_SHOW                      以当前的大小和位置激活并显示窗体。
6 SW_SHOWDEFAULT
7 SW_SHOWMAXIMIZED    激活并最大化显示窗体。
8 SW_SHOWMINIMIZED     激活并最小化现实窗体。
9 SW_SHOWMINNOACTIVE    最小化窗体,保持其激活状态。
10 SW_SHOWNA                     以当前状态显示窗体,保持其激活状态。
11 SW_SHOWNOACTIVATE   以当前的大小和位置显示窗体,并保持其激活状态。
12 SW_SHOWNORMAL 激活并显示一个窗体。如果窗体为最大化或者最小化,窗体恢复到原始的大小和位置。当窗体第一次显示的时候,应用程序记录标记。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值