Seite 1 von 1

QProcess | Tastendruck im gestarteten Process bewirken

Verfasst: 10. November 2006 11:12
von t.rain
Hallo zusammen!

Bin von Qt 4 eigentlich sehr begeistert. Habe eine Frage die mit QProcess zusammenhängt.

Ich starte die Application
QProcess myproc;
myproc.start(.....)

So mein Problem ist nun dass ich so ca 5 sekunden nach dem starten warten muss und dann eine Taste ('Y') drücken muss. Wie kann ich dass am besten erreichen. Unter linux würde ich einfach stdin duplizieren. Wie geht man das in Windows an.

Wie gesagt es geht nur um das senden eines Tastaturcodes/Tastendrücks auf das gestartete Programm.


VIELEN Dank im Voraus
T.Rain

Verfasst: 10. November 2006 11:40
von Christian81
Da QProcess von QIODevice abgeleitet ist, sollte ein write() funktionieren. Siehe auch http://doc.trolltech.com/4.2/qprocess.h ... iteChannel

Verfasst: 10. November 2006 11:42
von t.rain
ja das habe ich eigentlich schon probiert. Aber was soll ich das senden wenn ich ein Y im Process den ich starte drücken möchte?

vielen dank bisher

Verfasst: 10. November 2006 11:45
von Christian81
Ein "Y" vielleicht?
Ggf. noch ein Carriage Return ("\n")

Verfasst: 10. November 2006 12:43
von t.rain
ja das war natürlich das erste das ich vrsucht habe.

Aber wohin schreibt process.write(...) denn überhaupt auf das StdIn des gestarteten Prozesses?

Vielen Dank schonmal

Verfasst: 10. November 2006 12:50
von t.rain
so hier der Code so wie ich das momentan versuche:

Code: Alles auswählen

QProcess unlock;
QByteArray bArray;
bArray.resize(2);
bArray[0] = 'Y';
bArray[2] = '\n';
unlock.setReadChannelMode(QProcess::ForwardedChannels);
unlock.start("C:\\TEST.exe", QStringList()<<"");
Sleep(1500);
std::cout<<"Writing command to application"<<std::endl;
unlock.write(bArray);
Sleep(1500);
unlock.write(bArray);
if(!unlock.waitForFinished())
std::cout<< "ERROR: "<<unlock.errorString().toLatin1().constData();
else
std::cout<<" Process ended"<<std::endl;
bin für jede hilfe dankbar

Verfasst: 10. November 2006 13:58
von Christian81
Was soll das:
bArray[2] = '\n';

Nimm doch QCString

QCString str = "Y\n";

Verfasst: 10. November 2006 14:27
von t.rain
hmm.


write()

verlangt aber QByte.....


QString funktioniert nicht, da müsste man typecasten

Verfasst: 10. November 2006 14:40
von Christian81
Dann lies mal was ich geschrieben habe - steht dort irgendwas von QString?

Verfasst: 10. November 2006 14:59
von t.rain
okay - aber QCString gibts bei meiner Qt 4.1 nicht!, und daher dachte ich es wäre ein tippfehler.

Verfasst: 10. November 2006 15:35
von Christian81
Ach ja, Qt4...
Da waurde QCString und QByteArray zusammengelegt. D.h. Du kannst auch
QByteArray str = "Y\n"; schreiben

Aber den Fehler den Du gemacht hast, hast du immer noch nicht bemerkt...
bArray[2] = '\n';

Verfasst: 10. November 2006 16:04
von t.rain
okay

[1] muss es heißen.


Aber ist egal, funktioniert auch nicht. Habe es mittlererweile aufgegeben und das Programm das ich steuern will selbst nachprogrammiert. Na ja schade, hätte mir einige stunden erspart.

Vielen Dank nochmals für die Hilfe.

Verfasst: 10. November 2006 16:11
von Christian81
Es sollte aber eigentlich funktionieren... mhhh muss ich mal schauen was da ggf. falsch läuft.