zoukankan      html  css  js  c++  java
  • Delphi 调用外部程序并等待其运行结束

    转自:http://blog.csdn.net/xieyunc/article/details/4140620

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

    1.

    uses
        Windows,
        SysUtils,
        Classes,
        ShellAPI;
    function RunAndWait(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
        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, 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;
        finally
        end;
    end;

    2.

    function WinExecAndWait32(FileName: string; Visibility: Boolean): integer;   
    var  
      zAppName: array[0..512] of 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, 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, 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 激活并显示一个窗体。如果窗体为最大化或者最小化,窗体恢复到原始的大小和位置。当窗体第一次显示的时候,应用程序记录标记。

  • 相关阅读:
    day44
    day38
    day37
    day36
    作业35
    day35
    作业34
    day34
    day33
    Windows API 第三篇
  • 原文地址:https://www.cnblogs.com/Closeyes/p/3161024.html
Copyright © 2011-2022 走看看