Advertisement
alanvcb

Executar

Feb 7th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 1.95 KB | None | 0 0
  1. unit UFuncoes;
  2.  
  3. interface
  4.  
  5. type TExecucao = (texMinimizado,texNormal,texMaximizado);
  6.  
  7. function ExecAndWait(const FileName: string; Janela: TExecucao; Esperar: Boolean): Longword;
  8.  
  9. implementation
  10.  
  11. uses Winapi.Windows;
  12.  
  13.  
  14. function ExecAndWait(const FileName: string; Janela: TExecucao; Esperar: Boolean): Longword;
  15. var
  16.    zAppName: array[0..512] of Char;
  17.    zCurDir: array[0..255] of Char;
  18.    WorkDir: string;
  19.    StartupInfo: TStartupInfo;
  20.    ProcessInfo: TProcessInformation;
  21.    AppIsRunning: DWORD;
  22. begin
  23.    StrPCopy(zAppName, FileName);
  24.    GetDir(0, WorkDir);
  25.    StrPCopy(zCurDir, WorkDir);
  26.    FillChar(StartupInfo, SizeOf(StartupInfo), #0);
  27.    StartupInfo.cb          := SizeOf(StartupInfo);
  28.    StartupInfo.dwFlags     := STARTF_USESHOWWINDOW;
  29.    case Janela of
  30.      texMinimizado : StartupInfo.wShowWindow := SW_MINIMIZE;
  31.      texNormal     : StartupInfo.wShowWindow := SW_NORMAL;
  32.      texMaximizado : StartupInfo.wShowWindow := SW_MAXIMIZE;
  33.    end;
  34.  
  35.    if not CreateProcess(nil,
  36.      zAppName, // pointer to command line string
  37.      nil, // pointer to process security attributes
  38.      nil, // pointer to thread security attributes
  39.      False, // handle inheritance flag
  40.      CREATE_NEW_CONSOLE or // creation flags
  41.      NORMAL_PRIORITY_CLASS,
  42.      nil, //pointer to new environment block
  43.      nil, // pointer to current directory name
  44.      StartupInfo, // pointer to STARTUPINFO
  45.      ProcessInfo) // pointer to PROCESS_INF
  46.      then Result := WAIT_FAILED
  47.    else
  48.    begin
  49.      if Esperar then
  50.      begin
  51.        while WaitForSingleObject(ProcessInfo.hProcess, 0) = WAIT_TIMEOUT do
  52.        begin
  53.          Application.ProcessMessages;
  54.          Sleep(50);
  55.        end;
  56.  
  57.        WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
  58.        GetExitCodeProcess(ProcessInfo.hProcess, Result);
  59.      end
  60.      else
  61.        Result := WAIT_ABANDONED;
  62.  
  63.      CloseHandle(ProcessInfo.hProcess);
  64.      CloseHandle(ProcessInfo.hThread);
  65.    end;
  66. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement