Bonjour,
Cette fonction n'est pas de moi (j'aurais bien aimé ), que son auteur me pardonne de ne pas le cité (je ne sais plus qui c'est) mais elle fonctionne parfaitement en remplacement de ShellExecute quand on veux attendre la fin de l'exécution d'un programme.
Le paramètre "voir" permet d'afficher ou non le programme lancé (c'est pratique), les autres paramètres se passe d'explication .
Déclaration :
Function ExecuteWait(Programme, parametres :string;voir :Boolean):Boolean;
Implémentation :
// Fonction permettant de lancer un programme externe et d'attendre la fin de celui-ci avant de continuer
Function TForm1.ExecuteWait(Programme, parametres :string;voir :Boolean):Boolean;
var ShExecInfo : TShellExecuteInfo;
begin
try
FillChar(ShExecInfo, SizeOf(ShExecInfo), 0);
with ShExecInfo do
begin
cbSize := SizeOf(ShExecInfo);
fMask := SEE_MASK_NOCLOSEPROCESS;
lpFile := PChar(Programme); { le nom du programme }
lpParameters := PChar(Parametres); { Les paramètres }
lpVerb := 'open';
if voir = True then nShow := SW_SHOW else nShow := SW_HIDE;
end;
if ShellExecuteEx(@ShExecInfo) then
begin { on execute le programme }
WaitForSingleObject(ShExecInfo.hProcess, INFINITE); { on attends un temps indefinie que l'appli s'arrete }
end;
result := True;
except
result := False;
end;
end;
Philippe DROUET