Mit WaitForSingleObject() auf Beendigung eines Fenster warten?



  • Hallo,

    ich starte per ShellExecuteEx einen Word-Prozess der mir ein Worddokument öffnet. Ich möchte gerne darauf warten, dass dieses Fenster (vom Benutzer) geschlossen wird, und dann weiter arbeiten.

    Allerdings wartet WaitForSingleObject nicht, bis das Fenster geschlossen ist, sondern liefert als Rückgabewert direkt "WAIT_OBJECT_0" zurück - was ja eigentlich bedeuten sollte, dass mein Fenster geschlossen wurde.

    Ich verstehe nicht ganz was ich hier falsch mache. Da ich den Prozess selbst starte um den es geht, müsste ich ja auch den richtigen Handle durch die Struktur haben, die ich verwende?!

    [cpp]
    HELLEXECUTEINFO sei;

    memset(&sei, 0, sizeof(sei));
    sei.cbSize = sizeof(SHELLEXECUTEINFO);
    sei.fMask = SEE_MASK_NOCLOSEPROCESS;
    sei.hwnd = NULL;
    sei.lpVerb = "open";
    sei.lpFile = sys_call.c_str();
    sei.lpParameters = parameter.c_str();
    sei.lpDirectory = NULL;
    sei.nShow = SW_SHOW;
    sei.hInstApp = NULL;

    ShellExecuteEx(&sei);
    /* ---schnipple-----*/
    WaitForSingleObject(sei.hProcess, INFINITE);
    [cpp]

    Danke für Ideen oder Kommentare



  • Sieht eigentlich richtig aus, ich habe das gleiche vor ein paar Tagen gemacht und es gerade verglichen. Für dich noch mal zum Vergleich:

    SHELLEXECUTEINFO ExecInfo;
    		ExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
    		ExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
    		ExecInfo.hwnd = 0;
    		ExecInfo.lpVerb = "open";
    		ExecInfo.lpFile = "C:\\xxx\\xxx\\xxx.exe";
    		ExecInfo.lpDirectory=0;
    		ExecInfo.lpParameters = "";
    		ExecInfo.nShow = SW_SHOW;
    		ExecInfo.hInstApp = NULL;
    		ShellExecuteEx(&ExecInfo);
    		WaitForSingleObject(ExecInfo.hProcess, INFINITE);
    

    Wenn dein Prozess nicht starten würde, hätte ich gesagt, dass du einfach mal die variablen Parts (die Strings) durch fixe ersetzen solltest. Aber so...?



  • Ich führe mein Programm über eine Batchdatei aus - könnte das damit etwas zu tun haben? Könnte das verursachen, dass mein Programm dann nicht warten kann?

    Wenn ich das Programm direkt ausführe, scheint es nämlich zu funktionieren, nur ich verstehe nicht ganz, was da den Unterschied ausmacht.



  • Goounda schrieb:

    Ich führe mein Programm über eine Batchdatei aus - könnte das damit etwas zu tun haben? Könnte das verursachen, dass mein Programm dann nicht warten kann?

    Wenn ich das Programm direkt ausführe, scheint es nämlich zu funktionieren, nur ich verstehe nicht ganz, was da den Unterschied ausmacht.

    Die Batchdatei wird wahrscheinlich beendet, sie startet halt nur die exe, wartet aber nicht auf deren Beendigung. Das kann man in der Batchdatei auch irgendwie einstellen, ich weiß aber grad nicht mehr wie... EDIT: Musste man da nicht CALL dem exe-Aufruf voranstellen oder so?

    EDIT2: Hm, also wenn ich eine Batchdatei starte, die notepad.exe aufruft (ob mit oder ohne call), dann wartet WaitForSingleObject immer ganz korrekt auf Beendigung...


Log in to reply