25. februar 2001 - 14:55Der er
6 kommentarer og 1 løsning
Kald og aflæsning af output fra console-app
Hej.
Jeg har en win-app i delphi5. Så har jeg en console-app, som jeg ikke selv har lavet. Jeg vil meget gerne have win-app\'en til at kalde/køre console-app\'en. Det er nemt nok - med ShellExecute fx. Men jeg vil gerne have win-app\'en til at VENTE på at console-app\'en er færdig med at køre, og derefter aflæse, hvad console-app\'en har puttet ud på skærmen (dvs. at den skal selvfølgelig være skjult ---).
For at vente på noget bruger man en række af funktioner der alle hedder noget med WaitFor...
De funktioner skal alle have et Handle de skal \'vente på\'.
Sådan et handle for du f.eks. fra funktionen CreateProcess, som er den du skal bruge i stedet for ShellExecute.
Outputtet fra console applikationen skal du omdirigere ned i en fil. Det er nemmest hvis du laver en .BAT fil rundt omkring kaldet til dit konsolprogram, f.eks. en der hedder RUNIT.BAT og ser sådan ud:
MitKonsolProgram>output.txt
Dernæst eksekverer du runit.bat og venter på at processen slutter, hvorefter du åbner og læser output.txt. Her er et eksempel:
procedure TForm1.Button1Click(Sender: TObject); var zAppName:array[0..512] of char; StartupInfo:TStartupInfo; ProcessInfo:TProcessInformation; F: TextFile; S: string; begin try StrPCopy(zAppName, \'d:\\borland\\delphi5\\projects\\runit.bat\');
bortset når jeg så rent faktisk kalder console-app\'en (eller hvad det nu hedder) fra bat-filen. Så bliver den nemlig meget langsom - tager ca. 5 sekunder, hvor det burde tage et kvart.
Hvorfor? For når jeg kører bat-filen fra en dos-prompt går det lynende stærkt? - giver i øvrigt samme hastighedsproblem hvis jeg kalder andre consoles fra bat-filen.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.