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
[54701] Re:cmd에서 보이는걸 가져오고 싶습니다
장성호 [nasilso] 2122 읽음    2008-09-29 16:05
간단히 설명하면

CreateProcess로 cmd.exe를 실행해서 cmd 프로세서의 출력을 받아오면 됩니다.

[ cmd.exe의 출력을 받아오려면 ]

CreateProcess 함수를 보면 9번째에  STARTUPINFO 구조체 포인터를 넘겨줍니다.
STARTUPINFO 구조체는 winbase.h 에 다음과 같이 선언되어 있습니다.

BOOL WINAPI CreateProcessA(
    IN LPCSTR lpApplicationName,
    IN LPSTR lpCommandLine,
    IN LPSECURITY_ATTRIBUTES lpProcessAttributes,
    IN LPSECURITY_ATTRIBUTES lpThreadAttributes,
    IN BOOL bInheritHandles,
    IN DWORD dwCreationFlags,
    IN LPVOID lpEnvironment,
    IN LPCSTR lpCurrentDirectory,
    IN LPSTARTUPINFOA lpStartupInfo,     // STARTINFO 구조체포인터를 넘긴다.
    OUT LPPROCESS_INFORMATION lpProcessInformation
    );


typedef struct _STARTUPINFOA {
    DWORD   cb;
    LPSTR   lpReserved;
    LPSTR   lpDesktop;
    LPSTR   lpTitle;
    DWORD   dwX;
    DWORD   dwY;
    DWORD   dwXSize;
    DWORD   dwYSize;
    DWORD   dwXCountChars;
    DWORD   dwYCountChars;
    DWORD   dwFillAttribute;
    DWORD   dwFlags;
    WORD    wShowWindow;
    WORD    cbReserved2;
    LPBYTE  lpReserved2;
    HANDLE  hStdInput;                  // 표준 출력 핸들
    HANDLE  hStdOutput;               //  표준 입력 핸들 
    HANDLE  hStdError;                 //  표준 에러 핸들
} STARTUPINFOA, *LPSTARTUPINFOA;



STARTUPINFO 구조체의 맨 아랫쪽에 보면
다음 세가지가 있습니다.

    HANDLE  hStdInput;                  // 표준 출력 핸들
    HANDLE  hStdOutput;               //  표준 입력 핸들
    HANDLE  hStdError;                 //  표준 에러 핸들


이 표준 입/출력 핸들에 적당한 핸들을 만들어서 설정해 넘겨주면 됩니다.

[표준입/출력 핸들에는 어떤 걸 넘겨줘야 하는가?]

그것은 CreatePipe로 pipe를 만들어서 넘겨줘야 합니다.


[cmd.exe의 출력을 읽고 쓰기]
읽기는 
     STARTUPINFO 구조체의  hStdOutput 으로 넘겨준 핸들을 ReadFile로 읽으면 되고

쓰기는

     STARTUPINFO 구조체의  hStdInput으로 넘겨준 핸들에 WriteFile하면 됩니다.
    

이런 것을  redirect 라고 합니다.

키워드 redirect , CreatePipe , CreateProcess  로 아무데서나 검색해 보세요

[참고]
http://support.microsoft.com/kb/190351



그럼...








번외편 님이 쓰신 글 :
: cmd에서 route print 했을때
:
: 거의 맨 아래쪽
: Default Gateway : 192.168.10.1 이라는 정보를 가져와서
: 비교하려고 합니다.
:
: cmd 데이터를 가져오려면 어떻게 해야하나요?
: CreateProcess 라는걸 쓰면 된다고 하는데
: 좀더 자세히 알려주셨으면 합니다.
:
: 도움 부탁드립니다.

+ -

관련 글 리스트
54695 cmd에서 보이는걸 가져오고 싶습니다 번외편 1109 2008/09/29
54701     Re:cmd에서 보이는걸 가져오고 싶습니다 장성호 2122 2008/09/29
54714         장성호님 감사합니다. 그런데.. 번외편 1453 2008/09/30
54715             Re:장성호님 감사합니다. 그런데.. 장성호 1629 2008/09/30
54717                 성호님께 많은 도움 받네요 감사합니다 ^^ 번외편 1443 2008/09/30
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.