Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[7021] [답변] LCS0326/ 이런경우보셨나요?(급합니다..)
박테리아 [ ] 633 읽음    2000-02-16 23:38
안녕 하세요?

BacTeria 박종민 입니다.

제 생각엔 외부 프로그램 실행시에 CreateProcess 함수로 실행 시킨후 종료 여부를

확인 후에 처리해 주시는게 나을듯 싶네요.

제가 예전에 답변했던 내용을 아래에 첨부 합니다. 참고 하세요.

이만... 청주에서 박종민...

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

┌───────────────────────────────────┐
│  ▶ 번  호 : 1071/1231             ▶ 등록자 : 박테리아              │
│  ▶ 등록일 : 1999년 08월 04일 02:18                                  │
│  ▶ 제  목 : [답변] WinExec로 실행된 프로그램 끝날때까지 기다리는 ? │
└───────────────────────────────────┘

안녕 하세요?

BacTeria 박종민 입니다.

음... WinExec 함수를 써서 프로그램을 실행시키면 종료 여부를 확인 할 방법이

없습니다.

그 대안으로 아래와 같이 CreateProcess 를 쓰는 방법을 권해 드립니다.

소스를 보시면 아시겠지만 계산기 프로그램을 5번 계속해서 실행시켜줍니다.

이만...

청주에서 박종민...


PS. 강제적으로 프로그램을 종료 하려면 이렇게 해주시면 됩니다.
    => TerminateProcess(ProcessInfo.hProcess, 0);  // ProcessInfo 가 전역으로
                                                   // 선언 되어 있어야겠죠?

------------------------------------------------------------------------------
procedure RunProgram(FileName: String);
var
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
  Created_OK: Boolean;
begin
  FillChar(StartupInfo, Sizeof(TStartupInfo), #0);
  FillChar(ProcessInfo, Sizeof(TProcessInformation), #0);

  StartupInfo.cb := SizeOf(StartupInfo);
  StartupInfo.dwFlags := STARTF_USESTDHANDLES + STARTF_FORCEONFEEDBACK;

  Created_OK := CreateProcess(nil, PChar(FileName), nil, nil, False,
                              CREATE_NEW_CONSOLE + NORMAL_PRIORITY_CLASS,
                              nil, nil, StartupInfo, ProcessInfo);

  if Created_OK then
    while WaitForSingleObject(ProcessInfo.hProcess, 10) = WAIT_TIMEOUT do
      Application.ProcessMessages;

  CloseHandle(ProcessInfo.hProcess);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Byte;
begin
  for i := 1 to 5 do
    RunProgram('Calc.exe');
end;



+ -

관련 글 리스트
7021 [답변] LCS0326/ 이런경우보셨나요?(급합니다..) 박테리아 633 2000/02/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.