標準出力の受け取りは以下のようにする.
PROCESS_INFORMATION _procinfo;
STARTUPINFO _startup;
SECURITY_ATTRIBUTES saProcess;
HANDLE hFile;
memset(&_startup, 0, sizeof(STARTUPINFO)); // 構造体の初期化
_startup.cb = sizeof(STARTUPINFO);
_startup.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
_startup.wShowWindow = SW_SHOWMINNOACTIVE | SW_HIDE; // 最小サイズで起動させる
// リダイレクト内容格納ファイルのハンドル取得及び STARTUPINFO にセット
memset( &saProcess, 0, sizeof(saProcess));
saProcess.nLength = sizeof( saProcess );
saProcess.bInheritHandle = TRUE;
hFile = CreateFile( "XXXXX.LOG", // リダイレクト内容を格納するファイルの名前
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_WRITE | FILE_SHARE_READ,
&saProcess,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_WRITE_THROUGH,
NULL );
if( hFile == (HANDLE)(HFILE_ERROR)) {
// エラー処理
}else{
// CreateFile成功
_startup.hStdOutput = hFile;
}
// DOS プログラムの起動
BOOL bRet = CreateProcess( NULL,
(LPSTR)"XXX.EXE /A /P", // コマンドライン
NULL,
NULL,
TRUE,
0,
NULL,
NULL,
&_startup,
&_procinfo );
if( bRet != TRUE ) {
// エラー処理
}else{
// DOS プログラムの終了を待つ
bRet = WaitForSingleObject(_procinfo.hProcess, INFINITE);
if( bRet == WAIT_FAILED ) {
// プロセス異常
}
}
// リダイレクト格納ファイルのクローズ
CloseHandle(hFile);
参照