CreateProcess() を使用して、GUI アプリケーションから Windows で外部コンソール アプリケーションを実行しています。エラーがあったかどうかを知るために、何らかの方法で出力を収集したいと思います。hStdOutputで何かをしなければならないことはわかっていますが、何を理解していません。私は c++ を初めて使用し、経験の浅いプログラマーであり、実際にはハンドルをどうするか、またはパイプに火をつける方法を知りません。
出力をある種の変数 (またはファイル) に取得するにはどうすればよいですか?
これは私が今持っているものです:
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, &info, &processInfo))
{
::WaitForSingleObject(processInfo.hProcess, INFINITE);
CloseHandle(processInfo.hProcess);
CloseHandle(processInfo.hThread);
}
delete[](ppath);
delete[](pcmd);
}
このコードは、おそらくまともなプログラマなら誰でも悲鳴を上げるでしょうが、(言うべきではありません:) 動作します ;-)
質問: hStdOutput を使用して出力をファイル (たとえば) に読み取るにはどうすればよいですか?