Jak uruchomić i poźniej zamknąć aplikacje?
Standardowe metody uruchamiania aplikacji (ShellExecute, System) są nieskuteczne gdyż nie mamy żadnych uchwytów, aby później obsłużyć ich zamknięcie. Natomiast, jest funkcja w Winami „CreateProcess” która nie tylko uruchomi program ale i umożliwia obsłużenia jego końców (STDERR, STDOUT, STDIN – dla aplikacji konsolowych) jak również zapisuje do struktury jego uchwyty (uchwyt wątku, uchwyt procesu).

1.Tworzymy nowy projekt (uruchamiamy Buildera)
2.Umieszczamy na formatce dwa przyciski (TButton) i komponent okna dialogowego (TOpenDialog)
3.Wypełniamy obsługę OnClick przycisków jak niżej:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
if ( OpenDialog1->Execute() )
{
  startupinfo.cb = sizeof(STARTUPINFO);
  GetStartupInfo(&startupinfo);
  //Uruchamianie procesu...
  CreateProcess(NULL, OpenDialog1->FileName.c_str(), NULL, NULL, TRUE,                  NULL, NULL, NULL, &startupinfo, &pinfo);
}
}
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
TerminateProcess(pinfo.hProcess, 0);
}


4. Dodajemy zmienne globalne poniżej TForm *Form1; :

TForm1 *Form1 
STARTUPINFO startupinfo
PROCESS_INFORMATION pinfo;


5. Kompilujemy i działa (łaski nie robi) ...


Autorem tekstu jest: Wojciech Bojewski
Materiał dodany przez użytkownika: _hador_