關鍵代碼:
void CRedirectPipeDlg::OnBnClickedRunCmd()<br />{<br /> // TODO: Add your control notification handler code<br /> UpdateData();<br /> m_strOutput = "";<br /> SECURITY_ATTRIBUTES sa;<br /> HANDLE hRead,hWrite;<br /> sa.nLength = sizeof(SECURITY_ATTRIBUTES);<br /> sa.lpSecurityDescriptor = NULL;<br /> sa.bInheritHandle = TRUE;<br /> if (!CreatePipe(&hRead,&hWrite,&sa,0))<br /> {<br /> MessageBox(_T("Error On CreatePipe()"));<br /> return;<br /> }<br /> STARTUPINFO si;<br /> PROCESS_INFORMATION pi;<br /> si.cb = sizeof(STARTUPINFO);<br /> GetStartupInfo(&si);<br /> si.hStdError = hWrite;<br /> si.hStdOutput = hWrite;<br /> si.wShowWindow = SW_HIDE;<br /> si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;<br /> CString strCmd(_T("cmd /C /"")+m_strCmd+_T("/""));<br /> if (!CreateProcess(NULL, (LPSTR)strCmd.GetString(), NULL, NULL, TRUE, NULL, NULL, NULL, &si,&pi))<br /> {<br /> MessageBox(_T("Error on CreateProcess()"));<br /> return;<br /> }<br /> CloseHandle(hWrite);<br /> char buffer[4096] = {0};<br /> DWORD bytesRead;<br /> while (true)<br /> {<br /> if (ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL)<br /> break;<br /> m_strOutput += buffer;<br /> memset(buffer, 0, 4096);<br /> UpdateData(false);<br /> Sleep(200);<br /> }<br />}
: