Windowsパイプテクノロジーによる標準出力のキャプチャ


ネット上で1ヶ月探してやっと探し当てて、本当に容易ではありませんて、みんなに役に立つことを望みます
 
void CTestDlg::OnButton1() 
{
	// TODO: Add your control notification handler code here

		
	SECURITY_ATTRIBUTES sa; 
	HANDLE hRead,hWrite; 
	
	sa.nLength = sizeof(SECURITY_ATTRIBUTES); 
	sa.lpSecurityDescriptor = NULL; 
	sa.bInheritHandle = TRUE; 
	if (!CreatePipe(&hRead,&hWrite,&sa,0)) { 
		MessageBox("Error On CreatePipe()"); 
		return; 
	} 
	
	STARTUPINFO si; 
	PROCESS_INFORMATION pi; 
	si.cb = sizeof(STARTUPINFO); 
	GetStartupInfo(&si); 
	si.hStdError = hWrite; 
	si.hStdOutput = hWrite; 
	si.wShowWindow = SW_HIDE; 
	si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; 
	if (!CreateProcess(NULL,"cmd.exe /c dir /?" 
		,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi)) { 
		MessageBox("Error on CreateProcess()"); 
		return; 
	} 
	CloseHandle(hWrite); 
	
	char buffer[4096] = {0}; 
	DWORD bytesRead; 
	while (true)
	{ 
		if (ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL) 
			break; 
		m_edit += buffer;//m_Edit1 CString 
		m_edit.Replace("
","\r
"); UpdateData(false); Sleep(200); } }