Prozess mit CreateProcess starten und auf Beendigung warten

void __fastcall StartProcess()
{
    AnsiString sPrgName = "c:winnt
otepad.exe";

    AnsiString sWorkDir = "c:winnt";

    TProcessInformation prozessinfo;
    TStartupInfo startinfo;

    startinfo.cb = sizeof(TStartupInfo);
    setmem(&startinfo,sizeof(TStartupInfo),0);

    if (CreateProcess(NULL, sPrgName.c_str(), NULL, NULL, false, CREATE_DEFAULT_ERROR_MODE | NORMAL_PRIORITY_CLASS, NULL, sWorkDir.c_str(), &startinfo, &prozessinfo) == true)
    {
        //Speicher freigeben
        CloseHandle(prozessinfo.hThread);

        //Warteschleife, die PROZESSINFO abfragt
        while(WaitForSingleObject(prozessinfo.hProcess, 100) == WAIT_TIMEOUT)
        Application->ProcessMessages();

        //hier angekommen ist das Programm durch den Benutzer beendet worden
        Application->MessageBox("Programm geschlossen!","",MB_OK);

        //Speicher freigeben
        CloseHandle(prozessinfo.hProcess);
    }
}

Schreibe einen Kommentar