제목을 어떻게 적을까 고민을 많이 했는데 잘 모르겠네요.
한마디로 말씀 드리자면, ipconfig.exe나 nslookup.exe등과 같이
프로그램을 실행시키면 콘솔창에 결과를 보여주는 프로그램을
우리 프로그램에서 실행한 후 메모리에 결과 값을 담을 수 있는 방법입니다.
파싱하여 쓴다면 필요한 프로그램을 간단하게 제작할 수 있겠죠?
#include <io.h>
#include <fcntl.h>
#include <process.h>
#define WRITE_HANDLE 1
#define READ_HANDLE 0
#define OUT_BUFF_SIZE 1024
int main()
{
HANDLE hProcess;
int hStdOut;
int hStdOutPipe[2];
// Create the pipe
if(_pipe(hStdOutPipe, 512, O_BINARY | O_NOINHERIT) == -1)
return 1;
// Duplicate stdout handle (next line will close original)
hStdOut = _dup(_fileno(stdout));
// Duplicate write end of pipe to stdout handle
if(_dup2(hStdOutPipe[WRITE_HANDLE], _fileno(stdout)) != 0)
return 2;
// Close original write end of pipe
close(hStdOutPipe[WRITE_HANDLE]);
// Spawn process
//hProcess = (HANDLE)spawnlp(P_NOWAIT, "nslookup.exe", "nslookup.exe", "www.naver.com", NULL);
hProcess = (HANDLE)spawnlp(P_NOWAIT, "ipconfig.exe", "ipconfig.exe", NULL);
// Duplicate copy of original stdout back into stdout
if(_dup2(hStdOut, _fileno(stdout)) != 0)
return 3;
// Close duplicate copy of original stdout
close(hStdOut);
if(hProcess)
{
int nOutRead;
int nExitCode = STILL_ACTIVE;
char szBuffer[OUT_BUFF_SIZE]={0,};
while (nExitCode == STILL_ACTIVE)
{
nOutRead = read(hStdOutPipe[READ_HANDLE],
szBuffer, OUT_BUFF_SIZE);
if(nOutRead)
{
// do something with the output of 'nslookup' that is contained
// in szBuffer
}
if(!GetExitCodeProcess(hProcess,(unsigned long*)&nExitCode))
return 4;
}
MessageBox(NULL, szBuffer, "ip", MB_OK);
}
return 0;
}
'프로그래밍 팁 > etc' 카테고리의 다른 글
IP주소값 가져오기 (0) | 2010.03.29 |
---|---|
윈도우 제공 API를 이용한 암호화 (0) | 2010.03.25 |
일정 길이(픽셀단위) 이상의 문자열에 ...으로 나타내기 (0) | 2010.03.23 |
IP 차단하기(방화벽) (0) | 2010.01.31 |
압축 소스(ZIP, ZLIB) (4) | 2010.01.28 |