[C++] automatische Tastatureingabe in gestartete .exe

eXcessEr

Grünschnabel
Hi!
Ich habe ein Programm (Fortran kompiliert) welches ich aus C++ (BCB6) starte. Dieses Programm erwartet als Eingabe ein "return". Hierfür habe ich bereits folgenden Code geschrieben:

Code:
// smarts295bat.exe starten
SHELLEXECUTEINFO ExecInfo;
ExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ExecInfo.hwnd = GetActiveWindow();
ExecInfo.lpVerb = "open";
ExecInfo.lpDirectory = "SMARTS_295_PC";
ExecInfo.lpFile = "smarts295bat.exe";
ExecInfo.lpParameters = NULL;
ExecInfo.nShow = SW_SHOW;
ExecInfo.hInstApp = NULL;
ShellExecuteEx(&ExecInfo);

//warten damit das keybd_event im richtigen Fenster ausgeführt wird
Sleep(100);
// Eingabe "return"
keybd_event(VK_RETURN,0,0,0);

Wie zusehen ist, warte ich mit "Sleep" 100 Millisekunden damit die simulierte Tastatureingabe nicht zu früh passiert. Aber immer 100 Millisekunden zuwarten ist natürlich keine schöne Lösung - könnte ja je nach Prozessorlast zu kurz oder zu lang sein.

Kann man irgendwie abfragen, ob das Programm in der Shell auf eine Eingabe wartet? Oder wie kann ich vermeiden zu warten?

Ich würde mich sehr über ein paar Ideen freuen.
 
Du könntest anstatt ShellExecuteEx() CreateProcess() verwenden und dann das STDOUT-Handle "umbiegen" somit hast du die Möglichkeit die Ausgaben des Programms zu lesen und darauf zu reagieren, denn irgendwann schreibt das Programm ja auf STDOUT z.B.: "Bitte drücken Sie ENTER!" oder so ähnlich.

Wie man das macht kannst du sicherlich hier irgendwo finden bzw. auch in der MSDN von Microsoft.
 
Zurück