使用管道重新導向方法擷取windows下命令列執行程式結果

來源:互聯網
上載者:User

關鍵代碼:

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 />}

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.