도스&콘솔 프로그램 관련(창안띄우기,StdOut, Wait > MFC Tip

본문 바로가기
사이트 내 전체검색

MFC Tip

도스&콘솔 프로그램 관련(창안띄우기,StdOut, Wait

페이지 정보

profile_image
작성자 이즈
댓글 0건 조회 1,004회 작성일 06-12-26 23:44

본문

이 코드는 DOS 프로그램 또는 Win32 Console 모드 프로그램을 외부실행화일로 사용하고자 할때 문제가 되는 다음 세가지 항목을 해결하는 방법을 담고 있습니다.

 

1. 콘솔창(DOS창) 창 안띄우기.

2. 끝날때까지 기다리기(실행이 끝난것을 감지하기)

3. 출력되는 내용을 화일로 저장하기

(만일 이 부분을 사용하시기 원치 않으시면 STARTF_USESTDHANDLES 를 삭제해 주세요)

 

void CTttDlg::OnOK()
{
    // TODO: Add extra validation here
    PROCESS_INFORMATION pInfo;
    STARTUPINFO  sInfo;
    DWORD            exitCode;
 
    HANDLE hOut = CreateFile("stdinout.txt",
          GENERIC_WRITE, NULL, NULL,
          CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

    sInfo.cb                  = sizeof(STARTUPINFO);
    sInfo.lpReserved      = NULL;
    sInfo.lpReserved2    = NULL;
    sInfo.cbReserved2  = 0;
    sInfo.lpDesktop      = NULL;
    sInfo.lpTitle            = NULL;
    sInfo.dwFlags          = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
    sInfo.dwX                = 0;
    sInfo.dwY                = 0;
    sInfo.dwFillAttribute  = 0;
    sInfo.wShowWindow = SW_HIDE;
    sInfo.hStdOutput    = hOut;
 
      if (!CreateProcess(NULL, "command.com /c lha a tt",
          NULL, NULL, TRUE, 0, NULL, "c:\\",
          &sInfo, &pInfo)) {
                printf("ERROR: Cannot launch child process\n");
                exit(1);
      }
 
      // Give the process time to execute and finish
      WaitForSingleObject(pInfo.hProcess, INFINITE);
 
        if (GetExitCodeProcess(pInfo.hProcess, &exitCode)) {
            switch(exitCode) {
            case STILL_ACTIVE:
                  printf("Process is still active\n");
                  break;

            default:
                  printf("Exit code = %d\n", exitCode);
                  break;
            }
        } else {
            printf("GetExitCodeProcess() failed\n");
        }

        CloseHandle(hOut);
}

 위의 CreateProcess()를 호출하는 부분에서 "Command.com /c"를 호출하는 부분이 있는데 이렇게 해주지 않으면, 호출하는 프로그램이 DOS 프로그램인 경우 자동으로 창이 닫히지 않는 문제가 발생하기 때문입니다.

댓글목록

등록된 댓글이 없습니다.

Total 172건 11 페이지

검색

회원로그인

회원가입

사이트 정보

컴퓨터 정보,윈도우즈,리눅스,포토샵,3ds
맥스,프로그래밍 강좌팁

접속자집계

오늘
732
어제
558
최대
5,287
전체
630,837
Copyright © www.qdata.co.kr All rights reserved.