GUI für Konsolenanwendung/Konsolenanwendung interaktiv von Programm aus steuern
-
Hallo
Ich möchte ein GUI für eine Konsolenanwendung schreiben. Das Problem ist allerdings, dass die Konsolenanwendung interaktiv ist, d.h. etwa wie ftp.exe. Man öffnet das Programm und kann verschiedenes nach und nach eingeben, befehle absetzen etc.
Ich kann die Befehle nicht wie das bei ftp.exe zum Beispiel möglich ist nicht als Parameter übergeben (bzw. aus Textdatei lesen)
Und ich muss diese Konsolenanwendung steuern. Es geht nicht alternativ irgendwelche Bibliotheken zu benutzen die die Funktionalität der Anwendung direkt bereitstellen.
Wie ist sowas möglich? Kann ich stdin und out der Konsolenanwendung irgendwie auf eine named pipe oder so umlenken um dann daten von meinem Programm zur konsole zu senden o.ä.?
-
mach doch nene eigenen ftp client auf
:wininet.h
-
Wie gesagt geht es um ein ftp-ähnliches Programm und genau so eine Lösung wollte ich nicht sondern ich wollte schon ein Konsolenprogramm steuern.
Versuche es grade über pipes. Kann die Ausgabe schon lesen. Für die Eingabe setze ich die Standardeingabe der Konsolenanwendung mit CreateProcess auf
StartupInfo.hStdInput = PipeInputRead; Über die Pipe schreibe ich mit
WriteFile(PipeInputWrite... . Hab alles versucht auch \n am Ende einzufügen. Geht aber nicht. Muss ich der Anwendung noch irgendwie mitteilen die Pipe auch auszulesen?
-
Es funktioniert jetzt. Ich kann der Konsolenanwendung Eingaben zusenden. Einziges Problem ist das Auslesen. Wenn ich aus der Pipe mit ReadFile lese funktioniert das so weit. Wenn die Pipe aber leer ist weil alle zeichen ausgelesen wurden wartet ReadFile bis wieder was zum auslesen da ist. Dabei bleibt das Programm dann hängen weil eben nichts mehr dazukommt ohne eingabe. Ich bräuchte irgendwie eine art Timeout für ReadFile. Gibt es so etwas?
-
Verwende asynchronous I/O (das mit OVERLAPPED und so), dann kannst du einfach CancelIo verwenden wenn du nimmer warten willst.
-
Benutz jetz PeekNamedPipe um festzustellen ob Daten in der Pipe sind bevor ich lese. Is zwar nich so elegant wie asyncrones Read aber reicht für mich vllkommen aus. Funktioniert jetz alles ganz gut