天天看点

VC++_读取SHELL命令结果

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管道技术编程​​