Newsgroup: it.comp.lang.delphi
Titolo: Fine di un evento

tramite Shellexecute il mio programma zippa una serie di file.
Come posso fare attendere fino alla fine del processo per continuare
l'esecuzione del programma?
Grazie.
PaoloA




Di seguito c'č un esempio (che avevo preso da questo NG) di Shell Execute
con "attesa".
ciao
Solid Snake
\/
\/
Eseguire un programma e attendere  che termini
{ Avvia un programma ed aspetta la sua chiusura prima di procedere.
I parametri:
cProgram: contiene nome.estensione del programma da eseguire
          (come accennato puň essere un bat ma anche un exe o un com).
          E' possibile per altro scrivere una cosa del tipo
          WinExecAndWait( 'miobat.bat par1 par2 par3', 0 )
          dove par1, par2, par3 sono i parametri che saranno elaborati dal
batch
          la funzione assume che il programma da eseguire si trovi nella
stessa
          directory dell'applicazione delphi infatti la prima riga della
          function cita
          cWorkDir := ExtractFilePath( Application.EXEName )
          ma nulla vieta di cambiare il tutto.
nVisibility:  č il modo di visualizzazione della finestra dos che viene
creata
              ma ho avuto alcuni problemi nella gestione del parametro e per
              il momento la funzione all'interno usa SW_SHOWDEFAULT fisso
              avrei potuto eliminare il parametro ma...
Il valore di ritorno č 0 se tutto č andato a buon fine qualsiasi altro
Intero se si č verioficato un errore} Non č vero si usa :
STARTF_USESHOWWINDOW
function WinExecAndWait(cProgram: string; nVisibility: integer): integer;
var
  cWorkDir: string;
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
begin
  cWorkDir:='';
  FillChar( StartupInfo, Sizeof( StartupInfo), #0);
  FillChar( ProcessInfo, Sizeof( ProcessInfo), #0);
  StartupInfo.lpReserved     := nil;
  StartupInfo.lpDesktop      := nil;
  StartupInfo.lpTitle        := PChar('DOS process');
  StartupInfo.dwX            := 1;
  StartupInfo.dwY            := 1;
  StartupInfo.dwXSize        := 600;
  StartupInfo.dwYSize        := 400;
  StartupInfo.dwXCountChars  := 80;
  StartupInfo.dwYCountChars  := 25;
  StartupInfo.dwFillAttribute:= 0;
  StartupInfo.cbReserved2    := 0;
  StartupInfo.lpReserved2    := nil;
  StartupInfo.hStdInput      := 0;
  StartupInfo.hStdOutput     := 0;
  StartupInfo.hStdError      := 0;
  StartupInfo.cb             := Sizeof( StartupInfo);    // Ampiezza in Byte
della struttura
  StartupInfo.wShowWindow    := STARTF_USESHOWWINDOW   file://correzione
SW_SHOWDEFAULT;          // nVisibility;
  StartupInfo.dwFlags        := STARTF_FORCEONFEEDBACK;
  if not CreateProcess(nil,
                       PChar(cWorkDir+cProgram),
                       nil,
                       nil,
                       false,
                       CREATE_NEW_CONSOLE or CREATE_DEFAULT_ERROR_MODE,
                       getEnvironmentStrings,
                       nil,
                       StartupInfo,
                       ProcessInfo) then
    Result:=-1
  else
    begin
      WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
      GetExitCodeProcess(ProcessInfo.hProcess,Result);
    end;
end;

you wrote:

WaitForSingleObject
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
--------------------------------------------------------------
"Partire e' un po' morire e morire e' partire un po' troppo !"
--------------------------------------------------------------