| Autor |
Beitrag |
PaulG
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 07.05.03 15:51
Ich möchte gerne die Ausgaben einer DOS-Konsolen Applikation umleiten.
1.) Ich rufe z.B. PKunzip auf und gebe dessen Parameter Datei und Applikationsparameter an. (per ShellExecute)
2.) Pkunzip prüft nun dieses und gibt dies in seinem Fenster aus....
3.) Wie leite ich das Ergebnis auf mein Programm um. Ich denke da z.B. an CreateProcess, habe damit aber keinerlei Erfahrung
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 07.05.03 15:59
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81:
| function TForm1.RunCaptured(const _dirName, _exeName, _cmdLine: string): String; var start: TStartupInfo; procInfo: TProcessInformation; tmpName: string; tmp: Windows.THandle; tmpSec: TSecurityAttributes; res: TStringList; return: Cardinal; begin try tmpName := 'Test.tmp'; FillChar(tmpSec, SizeOf(tmpSec), #0); tmpSec.nLength := SizeOf(tmpSec); tmpSec.bInheritHandle := True; tmp := Windows.CreateFile(PChar(tmpName), Generic_Write, File_Share_Write, @tmpSec, Create_Always, File_Attribute_Normal, 0); try FillChar(start, SizeOf(start), #0); start.cb := SizeOf(start); start.hStdOutput := tmp; start.dwFlags := StartF_UseStdHandles or StartF_UseShowWindow; start.wShowWindow := SW_Minimize; if CreateProcess(nil, PChar(_exeName + ' ' + _cmdLine), nil, nil, True, 0, nil, PChar(_dirName), start, procInfo) then begin SetPriorityClass(procInfo.hProcess, Idle_Priority_Class); WaitForSingleObject(procInfo.hProcess, Infinite); GetExitCodeProcess(procInfo.hProcess, return); CloseHandle(procInfo.hThread); CloseHandle(procInfo.hProcess); Windows.CloseHandle(tmp); res := TStringList.Create; try res.LoadFromFile(tmpName); result := res.Text; finally res.Free; end; Windows.DeleteFile(PChar(tmpName)); end else begin Application.MessageBox(PChar(SysErrorMessage(GetLastError())), 'RunCaptured Error', MB_OK); end; except Windows.CloseHandle(tmp); Windows.DeleteFile(PChar(tmpName)); raise; end; finally end; end;
procedure TForm1.FormCreate(Sender: TObject); var sl: TStringlist; i: Integer; begin s := Runcaptured('C:\', 'ipconfig.exe', '/all'); s := Trim(s); sl := TStringList.Create; try begin sl.Text := s; { Leerzeilen entfernen } for i := sl.Count-1 downto 0 do begin if sl.Strings[i] = '' then sl.Delete(i); end; s := sl.Text; end; finally sl.Free; end; ASCII2Ansi(s); Memo1.Text := s; end; |
|
|
PaulG
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 07.05.03 19:21
Danke ich probiers mal aus
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Do 08.05.03 02:50
ähmm, ging das nicht einfach mit > ? Z.B. "programmname" > PRN an den Drucker 
_________________ Gruß
Hansa
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 08.05.03 04:38
| hansa hat folgendes geschrieben: | ähmm, ging das nicht einfach mit > ? Z.B. "programmname" > PRN an den Drucker  |
Schön und dann scanne ich es wieder ein, um es in mein Programm zu bekommen oder wie? Siehe hier:
| Zitat: |
Wie leite ich das Ergebnis auf mein Programm um.
|
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Do 08.05.03 11:48
dann eben : "programmname" > "Dateiname"
@Luckie: klar, oder einfach scannen 
_________________ Gruß
Hansa
|
|
PaulG
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 08.05.03 14:00
Ganz nett...aber ich habe nicht vor, Ergebnisse in Dateien zu speichern...
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Do 08.05.03 15:17
Du willst also ohne den Umweg einer Datei, aus einer DOS-Box Daten an ein Windows-Programm übergeben  Na dann, viel Vergnügen. Und überlege dir mal, was eine Dosbox eigentlich ist und warum die so heißt und immer tiefer in Windows versteckt wird. Das hat schon seine Gründe. 
_________________ Gruß
Hansa
|
|
PaulG
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 08.05.03 15:29
hrrm...ja..schlaumeier 
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Do 08.05.03 15:36
| hansa hat folgendes geschrieben: | Du willst also ohne den Umweg einer Datei, aus einer DOS-Box Daten an ein Windows-Programm übergeben Na dann, viel Vergnügen. Und überlege dir mal, was eine Dosbox eigentlich ist und warum die so heißt und immer tiefer in Windows versteckt wird. Das hat schon seine Gründe.  |
?? So kompliziert ist das doch gar nicht und außerdem hat Luckie oben doch schon eine fertige Funktion gepostet..!
Eine Konsolte hat ein Input-Handle und ein Output-Handle. Diese Handles kann man nun beliebig setzten und damit die Eingabe/Ausgabe in Files/Pipes/Mailslots etc umleiten. Was andres passiert ja bei den "Operatoren" < und > auch nicht, nur dass da das Sytem die Handles setzt.
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Do 08.05.03 15:49
Hi Motzi,
Luckie macht das ja tatsächlich fast genau so, wie ich es die ganze Zeit skizziere. Ich wollte auf dasselbe hinaus, daß das Konsolenprogramm erst mal alles in eine Datei verfrachtet, was bei Luckie tmpFile etc. ist, und daß Delphi sich dort die Daten abholt und verarbeitet. Und das ganze halt mit > umleitet.
_________________ Gruß
Hansa
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Do 08.05.03 16:01
| hansa hat folgendes geschrieben: | Hi Motzi,
Luckie macht das ja tatsächlich fast genau so, wie ich es die ganze Zeit skizziere. Ich wollte auf dasselbe hinaus, daß das Konsolenprogramm erst mal alles in eine Datei verfrachtet, was bei Luckie tmpFile etc. ist, und daß Delphi sich dort die Daten abholt und verarbeitet. Und das ganze halt mit > umleitet. |
Stimmt, jetzt wo ichs mir näher angesehen hab seh ichs auch.. es ginge aber auch ohne Datei mittels einer Pipe oder eines Mailslot...
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
PaulG
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 08.05.03 18:32
dat funktioniert im Moment ganz wunderbar...dranbleiben
|
|