QProcess -> Tastendruck übermitteln

Alles rund um die Programmierung mit Qt
Antworten
tux.2000
Beiträge: 13
Registriert: 19. Juni 2008 08:09

QProcess -> Tastendruck übermitteln

Beitrag von tux.2000 »

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.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QProcess -> Tastendruck übermitteln

Beitrag von Christian81 »

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!
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
dazedly
Beiträge: 197
Registriert: 3. Oktober 2010 15:38
Kontaktdaten:

Re: QProcess -> Tastendruck übermitteln

Beitrag von dazedly »

QDateTime::currentDateTime();
tux.2000
Beiträge: 13
Registriert: 19. Juni 2008 08:09

Re: QProcess -> Tastendruck übermitteln

Beitrag von tux.2000 »

Ich möchte noch folgendes anführen, eine Sache, die ich auch nicht ganz verstehe...

Also die Codezeile

Code: Alles auswählen

process.startDetached("C:\\Windows\\system32\\cmd.exe", cmd);
öffnet die Eingabeaufforderung und führt das Kommando "cmd" aus.

Die Codezeile anschließend danach

Code: Alles auswählen

process.kill();
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).
brax
Beiträge: 208
Registriert: 11. Mai 2010 11:22

Re: QProcess -> Tastendruck übermitteln

Beitrag von brax »

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.
Antworten