음...
이상한 일이군요!!!
프로그램 도중에 외부프로그램을 실행시키고
외부프로그램이 끝나기를 기다렸다가 나머지 코드를
실행하려고 합니다.
다음 코드는 나이렉스의 팁에서 가져온 함수입니다.
-----------------------------------------------
// 외부프로그램을 실행시키고 기다리는 함수
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;
-----------------------------------------------
그런데 다른 외부프로그램은 종료를 기다리는데
이상하게도 "그림판(pbrush.exe)"는 프로그램이 끝나기 전에
제어가 돌아오는군요...
혹시 이유를 아시는 고수님의 해설을 부탁드립니다...
사용한 코드는 아래와 같습니다.
-----------------------------------------------
AsyncShell('pbrush.exe ' + GFileName, '');
Picture.LoadFromFile(GFileName);
-----------------------------------------------
여기서 GFileName은 현재 폼에 올라와있는 그림이고
이 그림을 편집한 후에 그림판을 종료하면
편집이 끝난 그림을 다시 폼위에 올리려고 합니다.
E-Mail: kimedu@hitel.net