ABader
Gast
|
 |
« am: 07.04.2002, 13:35:52 » |
|
Folgendes Problem: Wie kann man ein KONSOLE-Programm starten, und die Ausgabe und Eingabe, sprich die STDHANDLES umbiegen, damit STDIN nicht die Tastatur, und STDOUT nicht der Bildschirm ist? Zum Versuchen wollte ich die HANDLES mal auf ein File umbiegen, dass es Tastatureingaben aus c:in.txt nimmt, und Tastaturausgaben in c:out.txt schreibt. Dazu folgender Code:
[font size=2 face="Courier New"][font color="#000000"]procedure TForm1.Button1Click(Sender: TObject); var StartUpInfo: TSTARTUPINFO; ProcessInfo: TProcessInformation; Result: Boolean; stdin: TFileStream; stdout: TFileStream; stderror: TFileStream; begin stdin := TFileStream.Create('c:in.txt', fmOpenRead); stdout := TFileStream.Create('c:out.txt', fmOpenWrite); stderror := TFileStream.Create('c:error.txt', fmOpenReadWrite); getstartupinfo(Startupinfo); Startupinfo.dwFlags := STARTF_USESTDHANDLES;
Startupinfo.hStdInput := stdin.Handle; Startupinfo.hStdOutput := stdout.Handle; Startupinfo.hStdError := stderror.Handle;
Result := CreateProcess(nil, 'xcopy', nil, nil, True, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo); end;
Leider geht das nicht, XCOPY wird wohl gestartet, es öffnet sich ein KONSOLE Fenster, schliesst sich gleicht wieder... ich kriege also meine HANDLES nicht umgebogen. Kennt sich da jemand aus? Bitte um Hilfe.
Ich möchte nämlich machen, dass mein selbstprogrammierter HTTPServer bzw. HTTPProxy (in Delphi gecodet) CGIs unterstützt....
vielen Dank. Adrian
|