안녕하세요.
제가 외부 프로그램을 실행시켜 그것의 단계를 자동적으로 설치하려고 하는데 합니다.
그래서 WinExec라는 것을 쓰게 되었지요.
하지만 아래 소스와 같이 쓰면 문제가 발생하는데 왜 그런지 좀 말씀 좀 해주세요.
var
AlHandle : THandle;
begin
.
.
WinExec('실행파일', SW_SHOW);
sleep(1000 * 30);
.
.
AlHandle := FindWindow(PChar(MClass), PChar(MText));
//여기서 MClass는 윈도우의 ClassName이구요, MText는 그 윈도우의 텍스트입니다.
.
.
if ALHandle1 <> 0 then
ShowMessage('프로그램을 찾았어요. 핸들:'+IntToStr(ALHandle1))
// ** 찾지 못 했다면 나갑니다. ** //
else
begin
ShowMessage('프로그램을 찾지 못했다. 핸들:'+IntToStr(ALHandle2));
exit;
end;
ALHandle2 := FindWindowEx(ALHandle1,0,PChar(CClass),PChar(CText));
if ALHandle2 <> 0 then
ShowMessage('버튼을 찾았어요. 핸들:'+IntToStr(ALHandle2))
// ** 찾지 못 했다면 나갑니다. ** //
else
begin
ShowMessage('버튼을 찾지 못했다. 핸들:'+IntToStr(ALHandle2));
exit;
end;
.
.
라고 한다면 위의 실행프로그램의 진행율이 99% 걸려서 넘어가지 않아서 '프로그램을 찾지 못했다'라는 메세지가 나오네요. 진행율에 관한 그림파일은 첨부합니다.
그리고 위의 'sleep(1000 * 30);'의 라인을 빼면 진행율은 넘어가는데 그 시간차이로 인해서 또 '프로그램을 찾지 못했다'라는 메세지가 나오네요.
이 문제를 어떻게 해결할 수 있을까요?
그 진행율이 진행되는 동안 기다리긴 해야 하는데 어떻게 기다려야 할지...
좀 진전된다 싶더니만 여기서 딱 걸려서 더이상 진전이 되지 않는군요.. ㅠ.ㅠ
지금은 Repeat~ Until로 창의 존재 유무를 찾고 있지만 그것도 안돼고...
어떻게 해결해야 할지 답변 꼭 좀 부탁드리겠습니다.
그럼 이만.. 다시 한번 부탁드려요.
30 초간 컴을 멈추게되는 것 같은데요.
TTimer 를 사용하세요.
또한 컴이 다른 것을 하지 못하게 하고 혼자 설치 프로그램을 하게 한다면
sleep (1000) 을 30번 루프 돌리고
루프 중간에
Application.ProcessMessages;
을 사용하여 컴이 다른 메세지를 중간 중간 처리하게 하시는게 좋을 것 같군요.