プログラムの終了を待ち合わす

CreateProcess で起動したプログラムの終了を待ち合わせます。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの設定

  1. 新規プロジェクトで[空のプロジェクト]を作成します。
  2. メインプログラムのソースコードです。
    /***********************************************/
    /*★ プログラムの終了を待ち合わす    前田 稔 ★*/
    /***********************************************/
    #include    <windows.h>
    STARTUPINFO          si;
    PROCESS_INFORMATION  pi;
    
    //★ Windows Main 関数
    int  WINAPI  WinMain(HINSTANCE hInst, HINSTANCE, LPSTR lpCmdLine, int nCmdShow)
    {
        ZeroMemory(&si,sizeof(STARTUPINFO));
        ZeroMemory(&pi,sizeof(PROCESS_INFORMATION));
        si.cb= sizeof(STARTUPINFO);
        //si.dwFlags= STARTF_USESHOWWINDOW;
        //si.dwFlags= SW_SHOWNORMAL;
        CreateProcess(NULL,"notepad Main.cpp",NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
        if (pi.hProcess)
        {   DWORD   dwExitCode= STILL_ACTIVE;
            while(dwExitCode==STILL_ACTIVE)
            {   WaitForSingleObject(pi.hProcess,1000);
                GetExitCodeProcess(pi.hProcess,&dwExitCode);
            }
        }
        MessageBox(NULL,"終了しました","CreateProcess",MB_OK);
        return 0;
    }
    
  3. notepad を起動して、プログラムのソースコードを表示します。
    Main.cpp はこのプログラムのソースファイルの名前です。
  4. CreateProcess() はプロセスの起動を開始して、すぐにリターンします。
    そこでプロセスの終了を待ち合わせます。

【演習】

  1. notepad が終了してから MessageBox が表示されることを確認して下さい。
  2. 自動的に終了する簡単な console プログラムを作成して下さい。
    作成した console プログラムをコメントアウトしている行を外して実行してみて下さい。
    ウインドウが表示されること無くプログラムが実行されることを確認して下さい。

超初心者のプログラム入門(Win32API C++)