hEdit=CreateWindow("edit","",
WS_CHILD|WS_VISIBLE|WS_BORDER|ES_MULTILINE,
10,10,500,500,hwnd,(HMENU)1,0,0);
PROCESS_INFORMATION pi={0};
// ping 출력을 redirect할 파일 생성.
HANDLE hFile=CreateFile("a.txt",GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
0,
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
//모든 KO는 기본적으로 상속 불가능 하다.
//특정 KO를 상속가능하게 변경한다.
SetHandleInformation(hFile,HANDLE_FLAG_INHERIT,// 상속가능 여부를
HANDLE_FLAG_INHERIT); //상속 가능하게.
//------------------------------------------------------------------------
STARTUPINFO si={0};
si.cb=sizeof(si);
si.hStdOutput=hFile; //ping의 stdout과 연결할 파일
si.dwFlags =STARTF_USESTDHANDLES;
BOOL b=CreateProcess(0,"ping.exe www.ibmc.com",0,0,TRUE,
CREATE_NO_WINDOW, //flag. console 을 판들지 말라.
0,0,&si,&pi);
if(b)
{
// ping이 종료 될때까지 대기한다.
WaitForSingleObject(pi.hProcess, INFINITE);
// a.txt에서 모든 data를 읽어서 edit에 출력한다.
char s[4096] = {0};
SetFilePointer(hFile, 0, 0, FILE_BEGIN); // 파일포인터를 제일 앞으로..
DWORD len;
ReadFile(hFile, s, 4096, &len, 0);
SetWindowText(hEdit, s);
CloseHandle(hFile);
//==================================================================//
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
}
//-----------------------------여기까지 파일에 연결하는 소스-------------------------------
HANDLE hRead, hWrite;
CreatePipe(&hRead, &hWrite, 0, 1024);
SetHandleInformation(hWrite, HANDLE_FLAG_INHERIT,
HANDLE_FLAG_INHERIT);
PROCESS_INFORMATION pi = {0};
STARTUPINFO si = {0};
si.cb = sizeof(si);
si.hStdOutput = hWrite; // 쓰기 위한 파이프 핸들을 자식의 표준출력으로...
si.dwFlags = STARTF_USESTDHANDLES;
BOOL b = CreateProcess(0, "ping.exe www.imbc.com", 0, 0, TRUE,
CREATE_NO_WINDOW, 0, 0, &si, &pi);
if(b)
{
CloseHandle(hWrite); // 쓰기 위한 핸들은 필요 없다.
DWORD len;
while(1)
{
char s[4096] = {0};
BOOL bRet = ReadFile(hRead, s, 4096, &len, 0);
if(bRet == FALSE)
break; // 파이프가 닫힌 경우
// SetWindowText()를 사용하면 기존의 edit data가 지어ㅜ지고
// 새롭게 추가된다.. - 한줄씩 덧붙이려면!
SendMessage(hEdit, EM_REPLACESEL, 0, (LPARAM)s);
}
CloseHandle(hRead);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
}
WS_CHILD|WS_VISIBLE|WS_BORDER|ES_MULTILINE,
10,10,500,500,hwnd,(HMENU)1,0,0);
PROCESS_INFORMATION pi={0};
// ping 출력을 redirect할 파일 생성.
HANDLE hFile=CreateFile("a.txt",GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
0,
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
//모든 KO는 기본적으로 상속 불가능 하다.
//특정 KO를 상속가능하게 변경한다.
SetHandleInformation(hFile,HANDLE_FLAG_INHERIT,// 상속가능 여부를
HANDLE_FLAG_INHERIT); //상속 가능하게.
//------------------------------------------------------------------------
STARTUPINFO si={0};
si.cb=sizeof(si);
si.hStdOutput=hFile; //ping의 stdout과 연결할 파일
si.dwFlags =STARTF_USESTDHANDLES;
BOOL b=CreateProcess(0,"ping.exe www.ibmc.com",0,0,TRUE,
CREATE_NO_WINDOW, //flag. console 을 판들지 말라.
0,0,&si,&pi);
if(b)
{
// ping이 종료 될때까지 대기한다.
WaitForSingleObject(pi.hProcess, INFINITE);
// a.txt에서 모든 data를 읽어서 edit에 출력한다.
char s[4096] = {0};
SetFilePointer(hFile, 0, 0, FILE_BEGIN); // 파일포인터를 제일 앞으로..
DWORD len;
ReadFile(hFile, s, 4096, &len, 0);
SetWindowText(hEdit, s);
CloseHandle(hFile);
//==================================================================//
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
}
//-----------------------------여기까지 파일에 연결하는 소스-------------------------------
HANDLE hRead, hWrite;
CreatePipe(&hRead, &hWrite, 0, 1024);
SetHandleInformation(hWrite, HANDLE_FLAG_INHERIT,
HANDLE_FLAG_INHERIT);
PROCESS_INFORMATION pi = {0};
STARTUPINFO si = {0};
si.cb = sizeof(si);
si.hStdOutput = hWrite; // 쓰기 위한 파이프 핸들을 자식의 표준출력으로...
si.dwFlags = STARTF_USESTDHANDLES;
BOOL b = CreateProcess(0, "ping.exe www.imbc.com", 0, 0, TRUE,
CREATE_NO_WINDOW, 0, 0, &si, &pi);
if(b)
{
CloseHandle(hWrite); // 쓰기 위한 핸들은 필요 없다.
DWORD len;
while(1)
{
char s[4096] = {0};
BOOL bRet = ReadFile(hRead, s, 4096, &len, 0);
if(bRet == FALSE)
break; // 파이프가 닫힌 경우
// SetWindowText()를 사용하면 기존의 edit data가 지어ㅜ지고
// 새롭게 추가된다.. - 한줄씩 덧붙이려면!
SendMessage(hEdit, EM_REPLACESEL, 0, (LPARAM)s);
}
CloseHandle(hRead);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
}





최근 덧글