How can I execute a program and have my code wait until it is finished?
The next procedure allows you to execute a program and to wait until it's finished:
functionWinExecAndWait32(FileName: string; Visibility: Integer): dWord;
varzAppName: array[0..512] ofChar;
zCurDir: array[0..255] ofChar;
WorkDir: string;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
beginStrPCopy(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 notCreateProcess(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) thenResult := -1 { pointer to PROCESS_INF }else
beginWaitforSingleObject(ProcessInfo.hProcess, INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess, Result);
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
end;
end;
Delphi tip#50: to execute a program and wait a result
- 阅读全文 -