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