Buono sconto 4% su Toner e Cartucce agli utenti AZpoint. SU Iomiricarico.it!!
Per eseguire
un programma ed aspettare fino al termine di quest’ultimo
bisogna usare le funzioni API CreateProcess e
WaitForSingleObject.
La prima ha il compito di
eseguire il programma, mentre la seconda controlla se è
terminato.
Nel codice seguente viene eseguito il
programma Paint di Windows e si aspetta fino a quando non è
terminato. Successivamente viene mostrato il il messaggio
“Program closed” .
procedure
TForm1.Button1Click(Sender: TObject); var
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation; begin
FillChar(StartupInfo, SizeOf(TStartupInfo),
0); StartupInfo.cb := SizeOf(TStartupInfo);
if CreateProcess(nil, 'pbrush.exe', nil, nil,
False,
NORMAL_PRIORITY_CLASS,
nil, 'C:\Windows', Startupinfo,
ProcessInfo) then
begin
WaitforSingleObject(Processinfo.hProcess,
infinite);
CloseHandle(ProcessInfo.hProcess);
ShowMessage('Program closed');
end; end;
Il precedente codice
blocca completamente l’esecuzione dell’applicazione, compresa
anche la gestione dei messaggi di Windows. Si può ovviare a
ciò modificando la WaitForSingleObject nel modo seguente:
while WaitforSingleObject(ProcessInfo.hProcess,
time_out) = WAIT_TIMEOUT do
Application.ProcessMessages;
Time_out
è un valore numerico che indica il numero di millisecondi da
attendere prima di dare un risultato, mentre WAIT_TIMEOUT
significa che il tempo è passato prima che il programma sia
terminato.
|