Programm starten und Ausgabe auswerten

Kaiser206

Erfahrenes Mitglied
Hallo,
ich will eine Funktion in c++ schreiben, die unter windows eine beliebige Konsolenanwendung starten und deren Ausgabe auswerten. Also alles mir cout << oder printf ausgegeben wurde soll in einen String eingelesen werden.

Nach langem Suchen bin ich auf einige Funktionen dazu gestoßen:
HTML:
WinExec()
ShellExecute()
system()
CreateProcess()

Allerdings konnte ich das bisher nicht mit ihnen realisieren.

Kann mir da jemand weiterhelfen?
 
HI, is ganz einfach.
system gibst du einfach als char-Array, oder von Hand geschrieben, den Pfad der anwendung zurück, die gestartet werden soll, funktioniert eigentlich so wie die Kommandozeile von Windows, der Rückgabe wert von system, gibt dir dann das aus, was das Programm zurück gibt
int system(char*) ist glaube ich die Definition.
CreateProcess ist um einiges Komplizierter, und bietet viel mehr Möglichkeiten, das gestartete Programm zu manipulieren, der Hauptunteschied ist aber, dass bei system das Programm wartet bis das ausgeführte Programm fertig ist, und bei CreateProcess einfach weitergemacht wird (sofern nichts anderes angegeben). Die anderen Funktionen sind mir unbekannt.
 
Mit system erhalte ich aber immer nur eine Zahl und ich brauche den Text den das Programm ausgibt.

Ich bin jetzt auf folgende Funktion gestoßen:

HTML:
BOOL WINAPI ReadConsoleOutput(
  __in     HANDLE hConsoleOutput,
  __out    PCHAR_INFO lpBuffer,
  __in     COORD dwBufferSize,
  __in     COORD dwBufferCoord,
  __inout  PSMALL_RECT lpReadRegion
);

Leider weis ich jetzt nicht woher ich den hConsoleOutput herkriegen soll nach dem ich das Programm gestartet habe...

----------
EDIT:
Hab bei msdn ein beispiel dazu gefunden:
http://msdn.microsoft.com/en-us/library/ms685032(VS.85).aspx

Das betrifft aber nur den eigenen Prozess. GetStdHandle(DWORD) gibt den Handle auf die Konsoleneingabe, so wie ich das verstanden habe aber nur die eigene und keine fremde.

Es müsste soetwas geben wie zb "GetStdHandle(hProcess)", kann mir da jemand weiterhelfen?
 
Zuletzt bearbeitet:
Ach so, ich dachte du meinst den Rückgabe wert des Programms!
Also wenn das Programm was auf der Konsole ausgibt, dann kannst du diesen Output mit CreateProcess umleiten auf einen anderen Stream, anbieten würden sich da stringstream und filestream, ich weiß aber nicht genau wie das geht, da musst du dir Mal CreateProcess genauer anschauen.
 
Zurück