title: Using a handle to collect output from CreateProcess()
body: <p>I am using CreateProcess() to run an external console application in Windows from my GUI application.  I would like to somehow gather the output to know whether there were errors.  Now I know I have to do something with hStdOutput, but I fail to understand what.  I am new to c++ and an inexperienced programmer and I actually don't know what to do with a handle or how to light a pipe.</p>
  
  <p>How do I get the output to some kind of variable (or file)?</p>
  
  <p>This is what I have a the moment:</p>
  
  <pre><code>void email::run(string path,string cmd){
  
  
      WCHAR * ppath=new(nothrow) WCHAR[path.length()*2];
      memset(ppath,' ',path.length()*2);
      WCHAR * pcmd= new(nothrow) WCHAR[cmd.length()*2];
      memset(pcmd,' ',cmd.length()*2);
  
      string tempstr;
  
  
      ToWCHAR(path,ppath);  //creates WCHAR from my std::string
      ToWCHAR(cmd,pcmd);
  
      STARTUPINFO info={sizeof(info)};
      info.dwFlags = STARTF_USESHOWWINDOW;    //hide process
  
      PROCESS_INFORMATION processInfo;
  
      if (CreateProcess(ppath,pcmd, NULL, NULL, FALSE, 0, NULL, NULL, &amp;info, &amp;processInfo))
          {
          ::WaitForSingleObject(processInfo.hProcess, INFINITE);
  
          CloseHandle(processInfo.hProcess);
          CloseHandle(processInfo.hThread);
          }
  
      delete[](ppath);
      delete[](pcmd);
  }
  </code></pre>
  
  <p>This code probably makes any decent programmer scream, but (I shouldn't even say it:) It works ;-)</p>
  
  <p>The Question: How do I use hStdOutput to read the output to a file (for instance)?</p>