[delphi] Execute and wait for termination (16 and 32bit applications)
http://www.delphifaq.com/faq/delphi_windows_API/f353_0.htm
This unit is based upon the well-known and largely used WinExecAndWait function The former WinexecAndWait function doesn't compile under Delphi 2.0 because the GetModuleUsage function is no longer supported under Win95.
I have simply updated the previous code so that it works with Delphi 2.0 under Windows 95. With this function you can call Windows-based applications as well as Dos-based commands. That is 'c:\myapp\app32.exe' as well as command.com /c del *.bak'.
This new WinexecAndWait32 is intended for Delphi 2.0 Win95 only, it works for me but you use it at your own risk:
unit WinExc32;
// Author : Francis Parlant.
// Update : Bill Rinko-Gay
// Parameters:
// Path: a null terminated string with the command line
// Visibility: Windows SHOW constant such as WS_RESTORE
// Timeout: DWORD time in miliseconds or INFINITE to wait forever
//
// The previous version went into a loop, constantly checking to see
// if the exec'ed program had terminated. This version uses the Win95
// API call to WaitForSingleObject to block processing until the
// exec'ed program has terminated. The return value will be either
// an error code from the CreateProcess function, or the result
// of the wait.
interface
uses Windows;
function WinExecAndWait32(Path: PChar; Visibility: Word;
Timeout : DWORD): integer;
implementation
function WinExecAndWait32(Path: PChar; Visibility: Word;
Timeout : DWORD): integer;
var
WaitResult : integer;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
iResult : integer;
begin
FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
with StartupInfo do
begin
cb := SizeOf(TStartupInfo);
dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
{ you could pass sw_show or sw_hide as parameter: }
wShowWindow := visibility;
end;
if CreateProcess(nil,path,nil, nil, False,
NORMAL_PRIORITY_CLASS, nil, nil,
StartupInfo, ProcessInfo) then
begin
WaitResult := WaitForSingleObject(ProcessInfo.hProcess, timeout);
{ timeout is in miliseconds or INFINITE if
you want to wait forever }
result := WaitResult;
end
else
{ error occurs during CreateProcess see help for details }
result:=GetLastError;
end;
end.
반응형
'Delphi, RadStudio' 카테고리의 다른 글
[개발/delphi] Starting and stopping Windows services (0) | 2011.12.12 |
---|---|
[개발/delphi] how to have an exe file delete itself (0) | 2011.12.12 |
[delphi] Tracking DLL loading, attaching, detaching and unloading (0) | 2011.12.12 |
[개발/delphi] RLINK 32: out of memory (0) | 2011.12.12 |
[Delphi] IdHTTP로 세션아이디를 포함하여 요청하기 (SessionID) (0) | 2011.12.09 |
댓글