간단히 설명하면
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 라는걸 쓰면 된다고 하는데
: 좀더 자세히 알려주셨으면 합니다.
:
: 도움 부탁드립니다.