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

网络上找了一个月才找到,真不容易啊,希望对大家有帮助

 

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); 
	} 

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值