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
[73648] Re:외부 프로그램 실행후 값을 리턴받는 방법과 WIN32어플에 대해 질문있습니다.
ㅇㅇ [] 4786 읽음    2016-06-01 18:12


CreatePipe 를 이용해

rasdial 의 출력내용으로 접속성공 여부를 알아내는것입니다

어디선가 주운걸 수정한것입니다



bool connectVpn( UnicodeString vs, UnicodeString vid , UnicodeString vpw )
{
    char strExec[256];

    if( vs.Length() && vid.Length() && vpw.Length() )
    {
        formMain->addListLog( "vpn 접속 : %s , %s , %s" , OV(vs,vid,vpw));

        sprintf( strExec , "rasdial %s %s %s" , vs.t_str() , vid.t_str() , vpw.t_str() );

        bool flag;
        HANDLE hwrite, hread;
        SECURITY_ATTRIBUTES sa;
        sa.nLength = sizeof(SECURITY_ATTRIBUTES);
        sa.lpSecurityDescriptor = NULL;
        sa.bInheritHandle = true;

        // 어노니머스 파이프 생성
        flag = CreatePipe(&hread, &hwrite, &sa, 0);
        if (!flag)
        {
            formMain->addListLog("Fail to open pipe.");
            return false ;
        }

        // 콘솔어플리케이션 프로세스 실행을 위한 준비
        STARTUPINFO si;
        memset(&si, 0, sizeof(STARTUPINFO));
        si.cb = sizeof(STARTUPINFO);
        si.dwFlags = STARTF_USESTDHANDLES;
        si.hStdOutput = hwrite;  // 표준출력(stdout) 리다이렉션
        si.hStdError = hwrite;   // 표준에러(stderr) 리다이렉션
        PROCESS_INFORMATION pi;

        // 콘솔어플리케이션 프로세스 실행
        flag = CreateProcess(NULL, strExec , NULL, NULL, true, DETACHED_PROCESS,
          NULL, NULL, &si, &pi);
        if(!flag)
        {
           formMain->addListLog("Fail to create process.");
           return false;
        }

        CloseHandle(hwrite);//이것을 하지 않으면 프로세스가 block된다

        char buffer[512];
        DWORD BytesRead;
        AnsiString ResultString;

        while(ReadFile(hread, buffer, sizeof(buffer)-1, &BytesRead, NULL) && BytesRead)
        {
            buffer[BytesRead] = '\0';
            ResultString = ResultString + buffer;


        }
        CloseHandle(hread);

        if( ResultString.Pos( "명령을 완료했습니다." ) )
        {
            formMain->addListLog( "접속 성공" );

            return true;
        }

        ShowMessage( ResultString );

        formMain->addListLog( "연결할수 없음" );

        return false;
    }

    return true;
}

+ -

관련 글 리스트
73646 외부 프로그램 실행후 값을 리턴받는 방법과 WIN32어플에 대해 질문있습니다. 낭천 4563 2016/06/01
73648     Re:외부 프로그램 실행후 값을 리턴받는 방법과 WIN32어플에 대해 질문있습니다. ㅇㅇ 4786 2016/06/01
73662         [해결]Re:외부 프로그램 실행후 값을 리턴받는 방법과 WIN32어플에 대해 질문있습니다. 낭천 5379 2016/06/08
73647     Re:외부 프로그램 실행후 값을 리턴받는 방법과 WIN32어플에 대해 질문있습니다. 정영훈 5148 2016/06/01
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.