Ako vam ikada bude potrebno da pokrećete neku spoljnu aplikaciju iz vašeg projekta, a treba da sačekate njen završetak rada, nemojte koristiti proceduru „ShellExecute“. Zaobićićemo ovu proceduru korišćenjem funkcija: CreateProcess, WaitForSingleObject i CloseHandle. Pokrenite novi projekt i na formu postavite jedno komandno dugme, te događaju „ButtonClick“ dodajte sledeći programski kod:
procedure TForm1.Button1Click(Sender: TObject);
var
proc_info: TProcessInformation;
startni_info: TStartupInfo;
begin
// Inicijalizacija
FillChar(proc_info, sizeof(TProcessInformation), 0);
FillChar(startni_info, sizeof(TStartupInfo), 0);
startni_info.cb := sizeof(TStartupInfo);// Pokusaj kreiranja procesa
if CreateProcess(‘c:windowsnotepad.exe’, nil, nil,
nil, false, NORMAL_PRIORITY_CLASS, nil, nil,
startni_info, proc_info) False then
begin
// Proces je uspesno kreiran i
// ceka se njegovo okoncanje…
WaitForSingleObject(proc_info.hProcess, INFINITE);
// Proces je zavrsen. Mozemo ga zatvoriti.
CloseHandle(proc_info.hProcess);
Application.MessageBox(‘Notepad zavrsio rad!’,
‘Info’, MB_ICONINFORMATION);
end
else
begin
// Nemogucnost kreiranja procesa
Application.MessageBox(‘Nije moguce izvrsiti ‘
+ ‘application’, ‘Error’, MB_ICONEXCLAMATION);
end;
end;
Kada pokrenete aplikaciju i kliknete na dugme, pokrenuće se Windows editor „Notepad“ (proverite samo putanju). Kada zatvorite „Notepad“, dobićete poruku o završetku pozvanog procesa. Eventualni problemi mogu da se jave kod funkcije „WaitForSingleObject“ i to u kombinaciji sa nekim aplikacijama.
Pratite Krstaricu na www.krstarica.com