Hallo Qt-Gemeinde.
Ich habe folgendes Problem:
Derzeit verwende ich einen QProcess um eine externe Anwendung zu starten, z.B. die Windows-Console "cmd.exe".
proc->start("cmd.exe", QStringList() << "/c" << "dir");
Um die Ein- / Ausgabe der zu verstehen habe ich ich einfach mal das Kommando "dir" abgesetzt.
Das klappt auch alles wunderbar. Der Prozess wird angelegt, gestartet und die Ausgabe kann ich mittels readAllStandardOutput() auslesen.
Allerdings machen Aufrufe wie z.B. "time" Probleme:
proc->start("cmd.exe", QStringList() << "/c" << "time");
Hier wartet die Konsole auf einen Tastendruck (ENTER), um die aktuelle Zeit auszugeben bzw. allgemein eine Ausgabe zu generieren und den Prozess korrekt zu beenden.
Jetzt ist die Frage: Wie teile ich dem Prozess bzw. dem CMD-Fenster den Tastendruck mit? Geht dies evtl. über das Kommando write()? Mittels read() erreiche ich jedenfalls die Ausgabe der Konsole (stdout)...
Vielen Herzlichen Dank im Voraus.
QProcess -> Tastendruck übermitteln
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: QProcess -> Tastendruck übermitteln
Warum probierst Du es nicht einfach aus? Steht aber auch in der Doku
Abgesehen davon würde ich die aktuelle Zeit definitv nicht so versuchen zu bekommen... dafür gibt es wesentlich bessere Möglichkeiten!
Abgesehen davon würde ich die aktuelle Zeit definitv nicht so versuchen zu bekommen... dafür gibt es wesentlich bessere Möglichkeiten!
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: QProcess -> Tastendruck übermitteln
QDateTime::currentDateTime();
Re: QProcess -> Tastendruck übermitteln
Ich möchte noch folgendes anführen, eine Sache, die ich auch nicht ganz verstehe...
Also die Codezeile
öffnet die Eingabeaufforderung und führt das Kommando "cmd" aus.
Die Codezeile anschließend danach
bewirkt irgendwie gar nichts. Die Eingabeaufforderung bleibt weiterhin im Fenster geöffnet.
Wie schaffe ich es, dass das Fenster geschlossen und der Process ordnungsgemäß beendet wird?
Danke für eure Antort(en).
Also die Codezeile
Code: Alles auswählen
process.startDetached("C:\\Windows\\system32\\cmd.exe", cmd);Die Codezeile anschließend danach
Code: Alles auswählen
process.kill();Wie schaffe ich es, dass das Fenster geschlossen und der Process ordnungsgemäß beendet wird?
Danke für eure Antort(en).
Re: QProcess -> Tastendruck übermitteln
Durch das startDetached wird ein eigenständiger Prozess gestartet. Den kannst Du aus Deinem Programm nicht mehr steuern. Das ist schon daran ersichtlich, dass es sich bei startDetached um eine statische Methode handelt, sie hat also mit Deiner QProcess Instanz nichts mehr zu tun.
Wenn Du allerdings für cmd.exe nicht startDetached benutzt, wird sich keine Konsole öffnen. Du musst über die Methoden von QProcess bzw. QIODevice die Eingaben an cmd.exe schicken und die Ausgaben lesen, Dir also quasi eine Konsole nachbauen und den cmd.exe Prozess nur als Kommandointerpreter benutzen.
Wenn Du allerdings für cmd.exe nicht startDetached benutzt, wird sich keine Konsole öffnen. Du musst über die Methoden von QProcess bzw. QIODevice die Eingaben an cmd.exe schicken und die Ausgaben lesen, Dir also quasi eine Konsole nachbauen und den cmd.exe Prozess nur als Kommandointerpreter benutzen.