Exécuter Batch et attendre fin de son exécution

Résolu
sisi231 Messages postés 207 Date d'inscription mercredi 5 mars 2003 Statut Membre Dernière intervention 29 mars 2013 - 9 janv. 2008 à 13:52
sisi231 Messages postés 207 Date d'inscription mercredi 5 mars 2003 Statut Membre Dernière intervention 29 mars 2013 - 9 janv. 2008 à 17:19
Bonjour !

Je voudrais le corps d'une procédure dont l'entête serait :

procedure execute_batch (Batch_File: TFilename ; Visible : Boolean);

je voudrais que cette procédure éxécute un fichier batch et attende la fin de son exécution, ainsi que l'on puisse préciser à travers la propriété visible si sa fenêtre est visible ou non.

Merci.

SISI231

12 réponses

sisi231 Messages postés 207 Date d'inscription mercredi 5 mars 2003 Statut Membre Dernière intervention 29 mars 2013 5
9 janv. 2008 à 17:19
Ca y est j'ai ma fonction complète, testée peut-être améliorable mais fonctionnelle c'est déjà ça !


function LanceBatchAttenteFin(NomFichier:string;visible:boolean):boolean;
{permet de lancer un batch. NomFichier est le nom avec chemin     }
{de ce batch ou d'un raccourci qui pointe vers cet exécutable.   }
{ notre programme est arrété tant que l'exécutable n'est pas fini      }
{tout est arrété on ne peut donc même plus déplacer sa fenêtre.        }
{mettre visible à false pour cacher la fenêtre du batch}
{ il est donc préférable de la rendre invisible avant le lancement     }
{de cette fonction.                                                    }
{ LanceAppliAttenteFin renvoie true si le lancement s'est bien passé   }
var
  StartInfo : TStartupInfo;
  ProcessInformation : TProcessInformation;
  i:integer;
begin
  if visible then
  i:=0
  else
  i:=CREATE_NO_WINDOW;
  result:=true;
  ZeroMemory(@StartInfo, sizeof(StartInfo)); // remplie de 0 StartInfo
  StartInfo.cb:=sizeof(StartInfo);
  if CreateProcess(nil,PChar(NomFichier),nil,nil,true,i,nil,nil,
  StartInfo,ProcessInformation)
  then WaitForSingleObject(ProcessInformation.hProcess, INFINITE)// attend que l'application désignée par le handle ProcessInformation.hProcess soit terminée
  else result:=false;
end;

SISI231
2
Rejoignez-nous