外部プロセスの起動
STARTUPINFO sInfo; // ステータス情報(実行設定)
PROCESS_INFORMATION pInfo; // プロセス情報(実行結果)
ZeroMemory(&sInfo, sizeof(sInfo));
ZeroMemory(&pInfo, sizeof(pInfo));
sInfo.cb = sizeof(sInfo);
// Windows95対応
MSG msgDummy;
PeekMessage(&msgDummy, NULL, 0, 0, PM_NOREMOVE);
if(!CreateProcess(
NULL, // モジュール名称
"notepad.exe", // コマンドライン文字列
NULL, // セキュリティ記述子
NULL, // セキュリティ記述子
TRUE, // ?
0, // ?
NULL, // ?
NULL, // カレントディレクトリ
&sInfo, &pInfo))
{
ShowMessage("実行に失敗しました");
}
// プロセス終了を待つ場合、コメントを外す
// WaitForSingleObject(pInfo.hProcess, INFINITE);
// プロセスハンドラを閉じる
CloseHandle(pInfo.hProcess);
CloseHandle(pInfo.hThread);
外部プロセスの起動(標準出力を書き出す場合)
SECURITY_ATTRIBUTES sAttr;
sAttr.lpSecurityDescriptor = NULL;
sAttr.nLength = sizeof(sAttr);
sAttr.bInheritHandle = TRUE;
// ファイルハンドラの取得
HANDLE hFile = CreateFile(
ChangeFileExt(Application->ExeName, ".log").c_str(), // 実行ディレクトリにログファイルを出力
GENERIC_WRITE,
FILE_SHARE_READ,
&sAttr,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
STARTUPINFO sInfo; // ステータス情報(実行設定)
PROCESS_INFORMATION pInfo; // プロセス情報(実行結果)
ZeroMemory(&sInfo, sizeof(sInfo));
ZeroMemory(&pInfo, sizeof(pInfo));
sInfo.cb = sizeof(sInfo);
// コンソール画面を出したくない場合、以下のコメントを外す
//sInfo.dwFlags =
// STARTF_USESHOWWINDOW // wShowWindowフラグを使用する
// | STARTF_USESTDHANDLES; // hStdOutputフラグを使用する
//sInfo.wShowWindow = SW_HIDE; // ウィンドウを表示しない
// Windows95対応
MSG msgDummy;
PeekMessage(&msgDummy, NULL, 0, 0, PM_NOREMOVE);
sInfo.hStdOutput = (void*)hFile; // 標準出力にファイルハンドラを設定
sInfo.hStdError = (void*)hFile; // エラー出力にファイルハンドラを設定
if(!CreateProcess(
NULL, // モジュール名称
"console.exe", // コマンドライン文字列
NULL, // セキュリティ記述子
NULL, // セキュリティ記述子
TRUE, // ?
0, // ?
NULL, // ?
NULL, // カレントディレクトリ
&sInfo, &pInfo))
{
ShowMessage("実行に失敗しました");
}
// プロセス終了を待つ場合、コメントを外す
// WaitForSingleObject(pInfo.hProcess, INFINITE);
// プロセスハンドラを閉じる
CloseHandle(pInfo.hProcess);
CloseHandle(pInfo.hThread);
CloseHandle(hFile);