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:
4. Dodajemy zmienne globalne poniżej TForm *Form1; :
5. Kompilujemy i działa (łaski nie robi) ...
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);
}
{
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;
STARTUPINFO startupinfo
PROCESS_INFORMATION pinfo;
5. Kompilujemy i działa (łaski nie robi) ...
Autorem tekstu jest:
Wojciech Bojewski
Materiał dodany przez użytkownika: _hador_
