function WinExecAndWait32 (FileName: String; Visibility: integer): integer; var zAppName: array [0..512] of char; zCurDir: array [0..255] of char; WorkDir: String; StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation ; lpExitCode: Cardinal; begin 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, {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) then Result: = -1 {pointer to PROCESS_INF}
Else Begin WaitForsingleObject (ProcessInfo.hprocess, Infinite); getExitcodeProcess (ProcessInfo.hprocess, LPEXITCODE); Result: = lpexitcode; end;
Squiring: LZCX