Newsgroup: it.comp.lang.delphi
Titolo: Lancio di .EXE Come?

Vorrei fare un programmino che mi permette di lanciare una applicazione
esterna di tipo .EXE.
Che comando Delphi devo usare?
Grazie, Germano.

 wrote in message
news:p%Xw8.78261$m41.1...@twister2.libero.it...


 Che comando Delphi devo usare?
uff ma e' cosi' difficile leggerle ste faq ???
se proprio non puoi, allora leggi i messaggi vecchi, che sta domanda viene
postata ogni secondo!

uff ma e' cosi' difficile leggerle ste faq ???
Io le ho lette e me le sono pure stampate da tanto le trovo utili... pero' sai
una cosa? Mi piacerebbe veder completata la domanda in proposito del lancio
degli EXE con una spiegazione su come lanciare, che so, N applicazioni facendolo
una di seguito all'altra e non in parallelo (come accade con la CreateProcess o
con la ShellExecute)... insomma come imposto la mia routine (quella con le
ShellExecute) in modo che attenda che sia terminata l'esecuzione di cio' che ho
lanciato prima di eseguire il resto?
Spero che la cosa sia banale... ma non ne sono proprio sicuro.
Ciao
   Jenner
----( 
jen...@neurotix.com
 )----
----( 
http://neurotix.com
 )----

 lanciato prima di eseguire il resto?
Ah ok ma questa e' tutta un'altra cosa rispetto alla domanda che hai fatto
:)
pero' non so come si faccia, mi pare che devi ottenere l'handle del processo
(non chiedermi come:) e poi chiamare l'api di sincronizzazione
WaitForSingleObject (o qualcosa di simie)
Per l'handle credo che createprocess lo ritorni direttamente, ma non so
shellexecute.
Qualcun'altro spero sara' un po' piu' preciso!
bye!
--
{MSX}  -  
http://msx.rules.it
Mantenitore delle FAQ di it.comp.lang.delphi,
reperibili qui: 
http://gpi.infomedia.it/abc/delphi/FaqDelphi.txt

(o qualcosa di
simie)
Provato... come se la chiamata non esistesse (ho provato anche
chiamandola WaitForSingleObject (MyHandle, INFINITE);)... :(
Intanto
continuo a cercare...
Grazie!
Ciao
   Jenner
----(
http://neurotix.com
)----
----(
jen...@neurotix.com
)----
--------------------------------
Inviato via 
http://usenet.iol.it
 

 chiamandola WaitForSingleObject (MyHandle, INFINITE);)... :(
Boh ho guardato un po' e sembra proprio questa la chiamata da fare.
Dall'help alla pagina WaitForSingleObject:
Process: The CreateProcess or OpenProcess function returns the handle. A
process object's state is signaled when the process terminates.
Forse sbagli qualcosa nel codice.
Comunque la chiamata CreateProcess vuole un parametro di tipo
TProcessInformation che tra le altre cose conterra' l'handle del processo.
Ecco (dal componente TAppExec, scaricabile su torry) l'uso di createprocess
e waitforsignleobject:
  if not CreateProcess(nil,
    buffer,                        { pointer to command line string }
    nil,                           { pointer to process security
attributes }
    nil,                           { pointer to thread security attributes }
    false,                         { handle inheritance flag }
    CREATE_NEW_CONSOLE or          { creation flags }
    NORMAL_PRIORITY_CLASS,
    nil,                           { pointer to new environment block }
    nil,                           { pointer to current directory name }
    StartupInfo,                   { pointer to STARTUPINFO }
    ProcessInfo) then begin        { pointer to PROCESS_INF }
    FErrNo := GetLastError();
    raise EAppExecWinExec.Create(GetErrorString);
  end
  else if FWait then begin
    WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
    { GetExitCodeProcess(ProcessInfo.hProcess, ErrNo); }
    FErrNo := 0;
  end;
Attento che alcuni parametri vanno inizializzati prima di essere passati
alla CreateProcess.
Per maggiori info scaricati il componente. Dovresti trovarlo anche qui:
http://www.worldnet.net/~cycocrew/delphi/
bye!

procedure ExecuteAndWait(FileName: string; Wait: Boolean);
var
  SEI: TShellExecuteInfo;
begin
  // Inizializzo la struttura con i parametri.
  FillChar(SEI, SizeOf(SEI), #0);
  SEI.cbSize := SizeOf(SEI);
  if Wait then
    // Questo flag è necessario perché il campo
    // hProcess venga restituito in output.
    SEI.fMask := SEE_MASK_NOCLOSEPROCESS;
  SEI.lpFile := PChar(FileName);
  // Per mostrare l'applicazione lanciata.
  SEI.nShow := SW_NORMAL;
  if ShellExecuteEx(@SEI) then
  begin
    if Wait then
      // Aspetto che il processo termini.
      WaitForSingleObject(SEI.hProcess, INFINITE);
    // Rilascio il process handle.
    CloseHandle(SEI.hProcess);
  end;
end;