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

C++빌더 Q&A
C++Builder Programming Q&A
[51603] Re:OS 콘솔 출력을 받아내고 싶습니다.
박영목 [gsbsoft] 1349 읽음    2007-12-13 14:17
devpia에서 찾아고 흔한 함수 사용합니다. 단지 사용을 하지 않아서... ㅋㅋㅋㅋ
옛날 DOS나 ffmeg 같은 것,,,  윈도우에서 만든 것처럼 동작하게 할 수 있습니다.

자바에 Runtime을 보고 윈도우에도 이런 기능이 없는 것인지 찾다가 찾은 것입니다.


아래의 소스는 저번에 후배에게 주었는 던 것인데....  consol 출력 내용을 메모장으로 들어오게 하는 것입니다.
그냥 보면 사용할 수 있습니다... 

참고하세요.....  



    AnsiString csExecute = csExeName + " " + csArguments;

    SECURITY_ATTRIBUTES secattr;
    ZeroMemory(&secattr,sizeof(secattr));
    secattr.nLength = sizeof(secattr);
    secattr.bInheritHandle = TRUE;

    HANDLE rPipe, wPipe;

    //Create pipes to write and read data
    CreatePipe( &rPipe, &wPipe, &secattr, 0 );

    STARTUPINFO sInfo;
    ZeroMemory(&sInfo,sizeof(sInfo));
    PROCESS_INFORMATION pInfo;
    ZeroMemory(&pInfo,sizeof(pInfo));
    sInfo.cb=sizeof(sInfo);
    sInfo.dwFlags=STARTF_USESTDHANDLES;
    sInfo.hStdInput=NULL;
    sInfo.hStdOutput=wPipe;
    sInfo.hStdError=wPipe;

    //Create the process here.
    CreateProcess( csExeName.c_str(), csArguments.c_str() ,0, 0, TRUE, NORMAL_PRIORITY_CLASS|CREATE_NO_WINDOW, 0, 0, &sInfo, &pInfo );
    CloseHandle(wPipe);

    //now read the output pipe here.
    char    buf[1025] = "";
    DWORD   reDword   = 0;
    AnsiString m_csOutput, csTemp;
    bool res   = NULL;
        m_csOutput = "";
        csTemp     = "";

          Memo1->Lines->Add( "START..." );
          Memo1->Lines->Add( "" );
    do
    {
          //memset( buf, 0x00, 1025 );
        res=::ReadFile(rPipe,buf,1024,&reDword,0);

          if( reDword )
          {
           Memo1->Lines->Add( buf );

           Memo1->Lines->Add( "--------------------------------------------------" );
          }
    }
        while(res);

        Memo1->Lines->Add( "" );
        Memo1->Lines->Add( "STOP..." );

    return m_csOutput;






bluewing 님이 쓰신 글 :
: 일종의 간단한 쉘 프로그램을 짜야 합니다.

: 예를 들면,
: delete ./myfolder/*.back

: 라는 문자열을 OS에게 날려서 실행시킨 후,
: 그게 실행될때 나타나는 문자열을 사용자에게 보여준다든가, 문자열을 화일로 저장한다든가 하는 작업을 하려고 합니다. 마치 Edit plus에서 외부 tool을 실행시키고 실행에 따른 DOS출력 문자열들을 사용자가 볼 수 있게 하는 식의 그런 기능을 만드려는 거죠.
:
: DOS명령어를 OS에게 던지는 것은 많이 해 봤지만,
: 결과 문자열을 가로채는 건 어떻게 해야 하는 건지 감이 안 잡히네요.
:
: 인터넷에서 검색해보려고 해도 검색어를 뭘로 해야 할 지 막막하네요. 쩝....
: 참고자료나 예제코드가 있는 웹 페이지 링크만이라도 부탁합니다.

+ -

관련 글 리스트
51578 OS 콘솔 출력을 받아내고 싶습니다. bluewing 1157 2007/12/12
51603     Re:OS 콘솔 출력을 받아내고 싶습니다. 박영목 1349 2007/12/13
51579     Re:OS 콘솔 출력을 받아내고 싶습니다. secondmoon 1235 2007/12/12
51581         '>' 로 잡혀나오지 않는 문자열들도 있어서요. bluewing 1133 2007/12/12
51586             Re:'>' 로 잡혀나오지 않는 문자열들도 있어서요. civilian,안영제 1221 2007/12/12
51590                 Re:Re:'>' 로 잡혀나오지 않는 문자열들도 있어서요. 장성호 1149 2007/12/12
51591                     Re:Re:Re:'>' 로 잡혀나오지 않는 문자열들도 있어서요. civilian,안영제 1208 2007/12/12
51601                         감사합니다. bluewing 1111 2007/12/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.