다음의 함수를 써보심이 어떠신지요.
WinExec 함수는 외부 프로그램을 실행하고 그 프로그램이 끝날때까지
기다리지 않는 것으로 알고 있습니다.
인터넷 어디선가 기다리도록 하는 것을 본 것 같은데 기억이 나지 않는군요
대부분 Win95 환경에서는 CreateProcess 함수를 써서
구현을 합니다. 다음 함수를 참고해 주세요.
// 인수로 전달된 화일을 실행하고 끝날때까지 기다린다.
function AsyncShell(FilePath, CmdLine:string) : Boolean;
var
StartInfo : TStartupInfo;
ProcessInfo : TProcessInformation;
bCreatedOk : Boolean;
IsTerminated : Integer;
begin
FillChar( StartInfo, Sizeof(TStartupInfo), #0);
FillChar( ProcessInfo, Sizeof(TProcessInformation), #0);
StartInfo.cb := sizeof(StartInfo);
StartInfo.dwFlags := STARTF_USESTDHANDLES + STARTF_FORCEONFEEDBACK;
// 매개변수가 있을 경우와 없을 경우를 달리호출한다.
if CmdLine <> '' then
bCreatedOk := CreateProcess(PChar(FilePath), PChar(CmdLine),
nil, nil, false,
DETACHED_PROCESS + HIGH_PRIORITY_CLASS,
nil, nil, StartInfo, ProcessInfo )
else
bCreatedOk := CreateProcess(nil, PChar(FilePath),
nil, nil, false,
DETACHED_PROCESS + HIGH_PRIORITY_CLASS,
nil, nil, StartInfo, ProcessInfo );
if bCreatedOk then begin
while True do begin
GetExitCodeProcess(ProcessInfo.hProcess, IsTerminated);
if (IsTerminated = 0) or (IsTerminated = 1) then Break;
Application.ProcessMessages;
end;
end;
CloseHandle(ProcessInfo.hProcess);
Result := True;
end;
|