• ベストアンサー

プロセスが終了されたかどうか調べる関数を教えてください。

まずは下のC++のソースをご覧ください。 ------------------------------------------------ PROCESS_INFORMATION ProcessInfo; STARTUPINFO StartupInfo = { 0 }; printf ("Start of Proc\n"); CreateProcess ( NULL, "c:\proc01.exe", NULL, NULL, FALSE, 0, NULL, NULL, &StartupInfo, &ProcessInfo) printf ("End of Proc\n"); ------------------------------------------------ この処理でCreateProcessで指定された"c:\proc01.exe"が起動されて 終了した時に、下のprintf()関数が実行されるのようにしたいのですが、 そのような処理をするAPI関数、またはC++関数をご存知ないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • senjyu
  • ベストアンサー率25% (7/27)
回答No.2

WaitForSingleObject(...)を使ってみてください。 CreateProcess()の最後の引数であるProcessInfo構造体のhProcessを WaitForSingleObject()に渡してやります。 例: 以下は、StartupInfoおよびProcessInfoが正常に確保・初期化されていることが 前提です。確保・初期化されていなければ希望の動作はしません。 ... printf ("Start of Proc\n"); CreateProcess ( NULL, "c:\proc01.exe", NULL, NULL, FALSE, 0, NULL, NULL, &StartupInfo, &ProcessInfo); // proc01.exe起動待ち // proc01.exeがシグナル状態になるのを待ちます // 状況によっては省略化 WaitForSingleObject(ProcessInfo.hProcess, INFINITE); // proc01.exe終了待ち // 上の逆で、proc01.exeが非シグナル状態になるのを待ちます while(1) { if(WaitForSingleObject(ProcessInfo.hProcess, 1)!=WAIT_OBJECT_0) break; } printf ("End of Proc\n"); ... 各関数の詳細は、VC++オンラインヘルプ(MSDN)で確認してください。 PS FindWindow(...)を使う手もあります。

その他の回答 (2)

  • Ponn
  • ベストアンサー率25% (14/54)
回答No.3

ありますよ。 僕の極秘ノート(笑)によれば、 WaitForSingleObject(ProcessInfo.hProcess,INFINITE); です。たぶんあっていますが今確認が取れません。 ついでに言えばウインドウの再描画もされませんよ。

  • pussyfoot
  • ベストアンサー率28% (39/138)
回答No.1

終了されたか調べるのではなくて終了するまで待つんじゃないでしょうか? VBで出来るんでCでも大丈夫だと思いますけど。 CreateProcessの引数で待ちみたいなのって無いのでしょうか?

関連するQ&A