Q&A

  • 외부프로그램실행이상하군요...
음...

이상한 일이군요!!!

프로그램 도중에 외부프로그램을 실행시키고

외부프로그램이 끝나기를 기다렸다가 나머지 코드를

실행하려고 합니다.



다음 코드는 나이렉스의 팁에서 가져온 함수입니다.

-----------------------------------------------

// 외부프로그램을 실행시키고 기다리는 함수

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



0  COMMENTS