09. december 2009 - 14:20
Der er
1 kommentar og
1 løsning
Vente på udfald af andet programs arbejde
Jeg sidder og skal lave noget der kalder et eksternt program som kører og danner en fil.
Mit program skal så bruge denne fil efterfølgende.
Jeg havde tænkt mig at gøre det at jeg smider en timer på min form og så når jeg kalder det eksterne program så starter jeg timeren og ved udløb checker jeg for om filen findes og i så fald gør jeg dit - ellers gør jeg dat.
Er det en helt forkert måde at gribe det an på?
Jeg kunne selvfølgelig også gøre det at jeg startede programmet og så laver en loop der checker om den process kører (jeg kender jo .exe navnet) og når den så ikke gør det mere så checke filen og gøre dit eller dat.
Det er vigtigt at mit 'hovedprogram' venter på hvad det eksterne program laver før det går videre.
09. december 2009 - 15:15
#2
Ja den var så nærliggende at jeg slet ikke havde tænkt på den :-)
Jeg har i forvejen en funktion som nedenstående. Den må kunne gøre det.
Function ExecuteAndWait(Const aFile, aParam : String): Integer;
Var
SEInfo : TShellExecuteInfo;
ExitCode : DWORD;
Begin
FillChar(SEInfo, SizeOf(SEInfo), 0) ;
SEInfo.cbSize := SizeOf(TShellExecuteInfo) ;
With SEInfo Do
Begin
fMask := SEE_MASK_NOCLOSEPROCESS;
Wnd := Application.Handle;
lpFile := PChar(aFile) ;
lpParameters := PChar(aParam) ;
nShow := SW_SHOWNORMAL;
End;
If ShellExecuteEx(@SEInfo) Then
Begin
Repeat
Application.ProcessMessages;
GetExitCodeProcess(SEInfo.hProcess, ExitCode) ;
Until (ExitCode <> STILL_ACTIVE) Or Application.Terminated;
Result := ExitCode;
End
Else
Result := -1;
End;