Q&A

  • WinExec에 관해서 질문 드립니다.답변 부탁좀 드리겠습니다.
안녕하세요.
제가 외부 프로그램을 실행시켜 그것의 단계를 자동적으로 설치하려고 하는데 합니다.
그래서 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로 창의 존재 유무를 찾고 있지만 그것도 안돼고...

어떻게 해결해야 할지 답변 꼭 좀 부탁드리겠습니다.

그럼 이만.. 다시 한번 부탁드려요.
2  COMMENTS
  • Profile
    이정귀 2004.04.11 07:49
    sleep 는 컴이 잠자게되어 아무 것도 하지 않는게 아닌가요,
    30 초간 컴을 멈추게되는 것 같은데요.
    TTimer 를 사용하세요.
    또한 컴이 다른 것을 하지 못하게 하고 혼자 설치 프로그램을 하게 한다면
    sleep (1000) 을 30번 루프 돌리고
    루프 중간에
    Application.ProcessMessages;
    을 사용하여 컴이 다른 메세지를 중간 중간 처리하게 하시는게 좋을 것 같군요.


  • Profile
    최용일 2004.04.09 06:56
    안녕하세요. 최용일입니다.

    WinExec대신에 CreateProcess나 ShellExecuteEx로 프로그램이 활성화될때까지 기다리거나 종료될 때까지 기다리시면 별문제 없이 처리될것 같네요...

    예제는 팁란이나 자유게시판에 있습니다. 응용해보세요...

    ^^ 항상 즐코하세요...