调用外部程序并等待程序运行结束《Lcemeaning》

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Vcl.ExtCtrls,Clipbrd;

type
  TForm1 = class(TForm)
    Button1: TButton;
    img1: TImage;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

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;

procedure TForm1.Button1Click(Sender: TObject);
var
 i : Integer;
begin
  Hide;
  Sleep(1000);
  i := WinExecAndWait32('D:PrintScreen.exe',True);
  if i=0 then
    img1.Picture.LoadFromClipboardFormat(CF_BITMAP,ClipBoard.GetAsHandle(CF_BITMAP),0);
  Show;
end;

end.
原文地址:https://www.cnblogs.com/LceMeaning/p/3365766.html