2016-04-08 2 views
-1

Ich habe System() verwendet, um IE in meinem C++ - Code auf einen Klick der Schaltfläche zu starten. Der IE wird gestartet, aber ein cmd-Fenster wird geöffnet und es wird gehängt. Ich schließe das cmd-Fenster und dann funktioniert es reibungslos. Warum gibt es einen anfänglichen Hang, wenn ich den IE zum ersten Mal starte?Starten von IE mit System() verursacht Hang zum ersten Mal

+0

[Funktion Createprocess] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425 (v = VS.85) .aspx) oder [Wie rufe ich :: CreateProcess in C++, um eine ausführbare Windows-Datei zu starten?] (Http://stackoverflow.com/questions/42531/how-do-i-call-createprocess-in-c-to-launch-a-windows-executable) –

+0

@JohnnyMopp Ich habe die Funktion nicht bekommen. Können Sie bitte den Funktionsaufruf von Create-Prozess zum Starten eines IE mit "C: \\ ProgramFiles \\ Internet Explorer \\ iexplorer.exe www.google.com" als URL mitteilen –

Antwort

0

Die Ursache ist, dass die system() eine Konsole öffnet und den Befehl von dort aufruft. Die Konsole wird nur geschlossen, wenn der Internet Explorer geschlossen wird.

Entweder verwenden CreateProcess oder Sie können Behelfslösung mit system() als auch durch den START-Befehl:

system("start \"Internet Explorer\" \"C:\\Program Files\\Internet Explorer\\iexplore.exe\" www.google.com"); 
+0

danke @axalis Ich habe den obigen Systembefehl und es verwendet funktionierte reibungslos. Können Sie mir bitte sagen, wie kann ich den vorhandenen IE mit einer angegebenen URL mit Systembefehl –

+0

schließen Das ist eigentlich nicht so einfach, müssten Sie die CreateProcess-Methode verwenden, um das Prozesshandle abrufen, um es zu schließen. Aber dies funktioniert möglicherweise immer noch nicht wie gewünscht, wenn jemand andere Fenster geöffnet hat (durch Beenden des Prozesses werden alle IE-Fenster geschlossen). Um nur das jeweilige Fenster zu schließen, müssen Sie EnumWindows verwenden und alle Fenster überprüfen, um das Fenster zu finden, das Sie schließen möchten. Senden Sie dann eine WM_CLOSE-Nachricht an dieses Fenster (beachten Sie jedoch, wenn der Benutzer Registerkarten verwendet, die alle Registerkarten schließen im Fenster - im Moment weiß ich nicht, wie man eine bestimmte Registerkarte aufzählt/schließt) – axalis

0

Dieser Code startet IE CreateProcess verwenden.

Sie können jedoch ShellExecute (ShellExecute(NULL, "open", "www.google.com", NULL, NULL, SW_SHOWDEFAULT);) verwenden, die den Standardbrowser des Benutzers verwendet.

const char *pathToExplorer = "C:\\Program Files\\Internet Explorer\\iexplore.exe"; 
const char *webPage = "www.google.com"; 

char szCmdLine[1024]; 
sprintf(szCmdLine, "\"%s\" \"%s\"", pathToExplorer, webPage); 

STARTUPINFO si = {0}; 
PROCESS_INFORMATION lp; 
si.cb = sizeof(STARTUPINFO); 
::CreateProcess(NULL, 
      szCmdLine, 
      NULL, 
      NULL, 
      FALSE, 
      CREATE_DEFAULT_ERROR_MODE | NORMAL_PRIORITY_CLASS, 
      NULL, 
      NULL, 
      &si, 
      &lp); 
Verwandte Themen