Frage

Ich versuche es für 5 Sekunden starten iexplore.exe laufen zu lassen und dann wieder schließen.

iexplore öffnet ganz gut aber es nicht schließen, wenn ich die Postthreadmessage nennen. Kann jemand sehen, was mache ich falsch? Hier ist mein Code:

CString IEPath = "C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE";//GetIEPath();
//IEPath += ' ' + url;
std::string strCommand((LPCTSTR)IEPath);
PROCESS_INFORMATION    procinfo;
STARTUPINFO    startupinfo;    
GetStartupInfo(&startupinfo);

CreateProcess(
        NULL,       
        (char *)strCommand.c_str(),// name of executable module
        NULL,           // lpProcessAttributes
        NULL,           // lpThreadAttributes
        false,          // handle inheritance option
        CREATE_SHARED_WOW_VDM,              // creation flags
        NULL,           // new environment block
        NULL,           // current directory name
        &startupinfo,    // startup information
        &procinfo        // process information
        );


Sleep(5000);
    ::PostThreadMessage(procinfo.dwThreadId, WM_QUIT, 0, 0); //<---Dosent Close internet explorer!

Wer eine Vorstellung davon hat, was ich falsch mache? Oder gibt es eine bessere Art und Weise, was den Trick zu tun?

War es hilfreich?

Lösung

Wenn Sie die Fenster auf dem Desktop aufzählen können und eine WM_CLOSE an die IE-Fenster schicken, es könnte funktionieren .. können Sie das Spion-Programm verwenden, um die Fensterklasse der IE-Fenster zu erhalten

Andere Tipps

Was ist der Rückgabewert der Postthreadmessage Anruf? Das könnte einen Anhaltspunkt geben.

Für mich das funktioniert perfekt:

TerminateProcess(procinfo.hProcess, 0);

Versuchen WM_CLOSE an das Haupt (Top-Level) Fenster zu senden. Das entspricht dem normalen Alt-F4 verlassen.

Ich habe keine Antwort haben speziell warum Postthreadmessage nicht funktioniert hat. Aber vielleicht, wenn Sie auf auszuarbeiten, warum wollen Sie dies tun, gibt es eine bessere Lösung?

Zum Beispiel, wenn Sie nur eine Webseite für 5 Sekunden angezeigt werden sollen, können Sie erstellen und zeigen Sie Ihre eigenen Fenster mit einem eingebetteten Internet Explorer ActiveX-Steuerelement. Sie werden auch in der Lage sein, ein Waschbecken hinzufügen zu erkennen, wenn die Web-Seite in dem ActiveX-Steuerelement geladen wird, so dass Sie Ihre 5-Sekunden-Zähler nur starten, nachdem die Webseite geladen und angezeigt wird.

I ended eine Aufzählung der Fenster nach oben zu tun (wie Serval von Ihnen genannten ich tun sollte) Ich war inspiriert von http://simplesamples.info/Windows/EnumWindows.php .

Verwenden Sie nicht Postthreadmessage (), die in den Zielprozess anstelle des Prozesses Windows Message Pump eine Nachricht an einen bestimmten Thread sendet. Verwenden Sie Postmessage () oder Sendmessage () statt, die die Nachricht in dem Zielprozess Windows Message Pump platzieren -. Das ist genau das, was Sie wollen

Nein, niemals Sendmessage () (Grund win32-Regel) Verwenden Sie keine EnmWindows () (schrecklich)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top