제목이 좀 이상해서 다시 설명을 드립니다.
외부프로그램을 실행시키고 실행후 화일이 하나 생성됩니다. 그리고 그 화일을 가지고 화일작업(카피, 리네임, 이동)을 하는데...화일이 생성이 끝나기전에 다름 라인을 실행하는것 같은데 좋은 방법이 없나요?
첨하는거라 어려움이 많네요....
덧붙여 dos prompt 상에서 실행하는거라서 문자열변수에 폼에서 입력한 값을 가지고 실행명령을 만들고 그 문자열로 외부프로그램을 실행시키는곳입니다.
//Source 일부분
strParamTemp := edtStartNum.Text + '.TXT ' + edtStartNum.Text + '.DAT';
strPGTemp := curDirName + '' + 'M2skt ' + strParamTemp;
WinExec(PChar(strPGTemp), SW_HIDE);
sleep(500);
//화일복사
useFileCopy(edtStartNum.Text + '.DAT', curDirName + '', createDirPath + 'tempDir');
sleep(300);
......밑에 계속 비슷한 로직이라 생략.......
이렇듯이 sleep으로 시간을 주어서 하는데 아무래도 깔끔하지도 않고 정확하게 시간을 설정한것 같지도 않고요....
좋은 방법좀 알려주세요..그럼 꾸벅
function WinExecAndWait32(FileName : PChar; CommandLine : PChar;
Visibility : Integer) : integer;
var
zAppName:array[0..512] of char;
zCurDir:array[0..255] of char;
WorkDir:ShortString;
StartupInfo:TStartupInfo;
ProcessInfo:TProcessInformation;
TmpResult:dword;
begin
StrCopy(zAppName, FileName);
StrCat(zAppName, CommandLine);
GetDir(0, WorkDir);
StrPCopy(zCurDir, WorkDir);
FillChar(StartupInfo, Sizeof(StartupInfo),#0);
StartupInfo.cb := Sizeof(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := Visibility;
if not CreateProcess(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 }
zCurDir, { pointer to current directory name }
StartupInfo, { pointer to STARTUPINFO }
ProcessInfo) then { pointer to PROCESS_INF }
Result := -1
else begin
WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess,TmpResult);
Result := TmpResult;
end;
end;
begin
strPGTemp := curDirName + '' + 'M2skt ' + strParamTemp;
while WinExecAndWait32(PChar(strPGTemp),'', SW_HIDE) <> 0 do
begin
Application.ProcessMessages;
end;
useFileCopy(edtStartNum.Text + '.DAT', curDirName + '',
createDirPath + 'tempDir');
end;