Autor Beitrag
PaulG
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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



BeitragVerfasst: Mi 07.05.03 15:59 
ausblenden volle Höhe Quelltext
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



BeitragVerfasst: Mi 07.05.03 19:21 
Danke ich probiers mal aus
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: 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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Do 08.05.03 11:48 
dann eben : "programmname" > "Dateiname"

@Luckie: klar, oder einfach scannen :lol:

_________________
Gruß
Hansa
PaulG
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 08.05.03 14:00 
Ganz nett...aber ich habe nicht vor, Ergebnisse in Dateien zu speichern...
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: 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. 8)

_________________
Gruß
Hansa
PaulG
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 08.05.03 15:29 
hrrm...ja..schlaumeier :wink:
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: 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. 8)

?? 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: 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



BeitragVerfasst: Do 08.05.03 18:32 
dat funktioniert im Moment ganz wunderbar...dranbleiben