您的位置:首页 > 运维架构 > Shell

VC++_读取SHELL命令结果

2015-09-24 16:50 555 查看
void CFfmpeg_divide_videoDlg::OnButtonBeginDivide() 
{
	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,"D:\\ffmpeg.exe "
		,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_Edit1 += buffer;
		UpdateData(false);
		Sleep(200);
	}
	MessageBox(buffer);
}


参考资料:

VC中利用匿名管道技术取得DOS或者命令行以及外部程序的输出

在VC中使用Windows管道技术编程



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