在Delphi中运行进程时阻止接口

时间:2017-09-29 14:37:03

标签: delphi

我有以下程序帮助我执行bat文件。我需要的是,当调用此过程时,直到它完成,以便用户无法处理任何事情,例如加载图标..

有关如何达到此目的的任何想法吗?

procedure RunAnalysis(ACommandLine: string);
var
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
begin
  FillChar(StartupInfo, SizeOf(StartupInfo), 0);
  StartupInfo.cb := SizeOf(TStartupInfo);

  UniqueString(ACommandLine);

  if CreateProcess(nil, PChar(ACommandLine), nil, nil, False,
    0, nil, nil, StartupInfo, ProcessInfo) then
  begin
    while WaitForSingleObject(ProcessInfo.hProcess, 10) > 0 do
      Application.ProcessMessages;

    CloseHandle(ProcessInfo.hProcess);
    CloseHandle(ProcessInfo.hThread);
  end
  else
    RaiseLastOSError;
end;

1 个答案:

答案 0 :(得分:0)

您可以通过点击按钮调用您的程序并禁用您的表单直到完成:

procedure yourform.Button1Click(Sender: TObject);
var Bat:string;
begin
Bat:={yourCommandLine};
yourform.Enabled:=false;
RunAnalysis(Bat);
yourform.Enabled:=true;
end;