您的位置:首页 > 其它

利用windows管道技术捕获标准输出

2011-07-30 19:46 591 查看
网络上找了一个月才找到,真不容易啊,希望对大家有帮助



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("\n","\r\n");
		UpdateData(false); 
		Sleep(200); 
	} 

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: