まずは下の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++関数をご存知ないでしょうか?

このQ&Aに関連する最新のQ&A

INFINITE」に関するQ&A: INFINITEの子供の時の写真

A 回答 (3件)

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(...)を使う手もあります。
    • good
    • 0

ありますよ。


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

終了されたか調べるのではなくて終了するまで待つんじゃないでしょうか?


VBで出来るんでCでも大丈夫だと思いますけど。
CreateProcessの引数で待ちみたいなのって無いのでしょうか?
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング