Gestartetes DOS Prog weiter steuern?

Emil

Mitglied
Moin moin!
Ich habe folgendes Problem!
Ich habe ein DOS Programm, von meiner C++ Anwendung aus, aufgerufen und ausgeführt! So weit so gut, aber leider kann ich diesem Programm keine Parameter übergeben (ist nicht vorgesehen).
Also müßte ich nun, nachdem das Programm ausgeführt wurde weitere befehle an das Programm senden.

In etwa so:

Dosproggi wurde gestartet von C++ aus mit z.B. ShellExecute
Dosproggi wartet
Dosproggi (meine zusätzliche Eingabe von C++ aus) liste auf
Dosproggi listet auf

Wie kann ich das Machen? Muß ich da mit einem Handle arbeiten? Hoffe ned das mit den Hadles macht mir doch sehr zu schaffen :)

Bin für jeden Tipp dankbar

cya
 
Vergiss es. Du kannst mit einem Programm nur soweit kommunizieren, wie es das auch zulässt. Wenn es keine Funktion zum Reagieren auf deine Eingaben zur Verfügung stellt, dann kannst du auch nichts machen. Und ein Dos Programm arbeitet sowieso nicht mit Fensterhandles oder so, jedes Programm ist seine eigene kleine Welt, die das ringsherum überhaupt nicht interessiert. Oder hast du das andere Programm selbst geschrieben und es ist eine Konsolenanwendung?
 
Nein habe ich ned selbst geschrieben! Ich dachte nur man könnte einfach einen Text in das Cmd Fenster leiten als ob man selber tippen würde.
Dann hätte ich das ganze so versucht. Na ja Vielen Dank auf alle Fälle.
 
Ach naja, prinzipiell kannst du schon einen Text in das Konsolenfenster klatschen, nur hat das Programm nix davon (das weiß schließlich gar nicht, dass da was anderes im Fenster steht als es reingeschrieben hat). Musst dann halt über FindWindow das Fensterhandle finden und über die GDI da reinzeichnen/reinschreiben.
 
Das mit dem Handle ist so eine Sache: Konsolenfenster verhalten sich nämlich nicht wie echte Fenster. Sonst könnte man eventuell hingehen und der Konsole WM_KEYDOWNs usw. schicken. So funktioniert tatsächlich nur das Drübermalen.
 
Schau mal ob du es mit Pipes hinbekommst (da hat man zugriff auf stdin, stdou und stderr der Konsolenapplikation)
 
Oh man so gut bin ich glaube ich ned!
Auf alle fälle vielen Dank! Ich werds auf alle fälle noch mal im Auge behalten :)

Das mit dem WM_Keydown hört sich interessant an.
 
pipes sind ziemlich simpel , statt in der konsole zu tippen schreibt man quasi in eine "Datei" , die halt dem stdin der gestarteten Applikation entspricht

siehe MSDN

/* POPEN.C: This program uses _popen and _pclose to receive a
* stream of text from a system process.
*/

#include <stdio.h>
#include <stdlib.h>

void main( void )
{

char psBuffer[128];
FILE *chkdsk;

/* Run DIR so that it writes its output to a pipe. Open this
* pipe with read text attribute so that we can read it
* like a text file.
*/
if( (chkdsk = _popen( "dir *.c /on /p", "rt" )) == NULL )
exit( 1 );

/* Read pipe until end of file. End of file indicates that
* CHKDSK closed its standard out (probably meaning it
* terminated).
*/
while( !feof( chkdsk ) )
{
if( fgets( psBuffer, 128, chkdsk ) != NULL )
printf( psBuffer );
}

/* Close pipe and print return value of CHKDSK. */
printf( "\nProcess returned %d\n", _pclose( chkdsk ) );
}

du müsstest halt ein Pipe mit write rechten aufmachen z.B. "wt"
 
Zurück