Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit UFuncoes;
- interface
- type TExecucao = (texMinimizado,texNormal,texMaximizado);
- function ExecAndWait(const FileName: string; Janela: TExecucao; Esperar: Boolean): Longword;
- implementation
- uses Winapi.Windows;
- function ExecAndWait(const FileName: string; Janela: TExecucao; Esperar: Boolean): Longword;
- var
- zAppName: array[0..512] of Char;
- zCurDir: array[0..255] of Char;
- WorkDir: string;
- StartupInfo: TStartupInfo;
- ProcessInfo: TProcessInformation;
- AppIsRunning: DWORD;
- begin
- StrPCopy(zAppName, FileName);
- GetDir(0, WorkDir);
- StrPCopy(zCurDir, WorkDir);
- FillChar(StartupInfo, SizeOf(StartupInfo), #0);
- StartupInfo.cb := SizeOf(StartupInfo);
- StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
- case Janela of
- texMinimizado : StartupInfo.wShowWindow := SW_MINIMIZE;
- texNormal : StartupInfo.wShowWindow := SW_NORMAL;
- texMaximizado : StartupInfo.wShowWindow := SW_MAXIMIZE;
- end;
- if not CreateProcess(nil,
- zAppName, // pointer to command line string
- nil, // pointer to process security attributes
- nil, // pointer to thread security attributes
- False, // handle inheritance flag
- CREATE_NEW_CONSOLE or // creation flags
- NORMAL_PRIORITY_CLASS,
- nil, //pointer to new environment block
- nil, // pointer to current directory name
- StartupInfo, // pointer to STARTUPINFO
- ProcessInfo) // pointer to PROCESS_INF
- then Result := WAIT_FAILED
- else
- begin
- if Esperar then
- begin
- while WaitForSingleObject(ProcessInfo.hProcess, 0) = WAIT_TIMEOUT do
- begin
- Application.ProcessMessages;
- Sleep(50);
- end;
- WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
- GetExitCodeProcess(ProcessInfo.hProcess, Result);
- end
- else
- Result := WAIT_ABANDONED;
- CloseHandle(ProcessInfo.hProcess);
- CloseHandle(ProcessInfo.hThread);
- end;
- end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement