Wenn ich mit ShellExecuteEx() eine .exe (Win32 Anwendung) starte und warte, bis deren MessageLoop läuft, müsste ich doch eigentlich gleich danach mit FindWindow() prüfen können, ob das Fenster vorhanden ist, oder nicht?
Wenn ich das so starte, bekomme ich immer "Fenster nicht gefunden".
Erst wenn ich zwischen Wait und Find ein Sleep(1000) einbaue funktioniert alles wie es soll.
Daraus schliesse ich erstmal, dass ich im Prinzip keinen Fehler drin habe, denn sonst würde es mit Sleep() auch nicht funktionieren.
Ich habe das 100 Mal überprüft, CreateWindow() und ShowWindow() steht in MyProgram.exe VOR dem MessageLoop, darum verstehe ich nicht, warum FindWindow() nur nach zusätzlichem Sleep() funktioniert, sollte der WaitForInputIdle() nicht reichen?
WENN Wait allein nicht reicht, gibt es eine andere Möglichkeit als das Ganze auf Verdacht eine bestimmte Zeit schlafen zu legen?
Code:
SHELLEXECUTEINFO ExecInfo = {0};
ExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ExecInfo.hwnd = 0;
ExecInfo.lpVerb = "open";
ExecInfo.lpFile = "MyProgram.exe;
ExecInfo.lpParameters = "";
ExecInfo.nShow = SW_SHOWNORMAL;
if(!ShellExecuteEx(&ExecInfo))
{
MessageBox(0,"MyProgram.exe nicht gefunden","ERROR",MB_OK);
}
WaitForInputIdle(ExecInfo.hProcess,INFINITE);
if(!FindWindow("MyProgramClassName",0));
{
MessageBox(0,"Fenster nicht gefunden","ERROR",MB_OK);
}
Wenn ich das so starte, bekomme ich immer "Fenster nicht gefunden".
Erst wenn ich zwischen Wait und Find ein Sleep(1000) einbaue funktioniert alles wie es soll.
Daraus schliesse ich erstmal, dass ich im Prinzip keinen Fehler drin habe, denn sonst würde es mit Sleep() auch nicht funktionieren.
Ich habe das 100 Mal überprüft, CreateWindow() und ShowWindow() steht in MyProgram.exe VOR dem MessageLoop, darum verstehe ich nicht, warum FindWindow() nur nach zusätzlichem Sleep() funktioniert, sollte der WaitForInputIdle() nicht reichen?
WENN Wait allein nicht reicht, gibt es eine andere Möglichkeit als das Ganze auf Verdacht eine bestimmte Zeit schlafen zu legen?