Problem beim Browser starten



  • N'abend, ich hab ich grad ein Problem, dass mich so langsam in den Wahnsinn treibt.

    Also, ich will einfach nur einen Browser öffnen, mit einer bestimmten Website.
    Dazu habe ich zunächst folgendes probiert:

    system("start www.google.de");
    

    Das funktioniert auf meinen PC, aber nur wenn zu dem Zeitpunkt kein anderer Browser geöffnet ist. Wenn also schon ein Browser geöffnet ist, öffnet sich immer nur ein leeres Konsolenfenster.Auf meinen Laptop funktionierte es sogar überhaupt nicht (auch nur ein leeres Konsolenfenster)

    Ich kam dann irgendwann auf die Idee, einfach eine batch-Datei zu schreiben und diese dann ausführen zu lassen:

    fstream f;
    f.open("cmd.cmd",ios::out);
    f << "start www.google.de" << endl;
    f << "exit" << endl;
    f.close();
    
    system("start cmd.cmd");
    

    Wie durch ein wunder funktionierte das sowohl auf meinem PC, als auf meinen Laptop (auch wenn bereits andere Browser geöffnet sind), obwohl es sich ja eigentlich um den selben Befehl handelt...

    So, aber jetzt muss ich diese Batch-Datei auch wieder löschen, und da tritt ein Problem auf.
    Wenn ich direkt nach dem " system("start cmd.cmd"); " die Datei lösche, ist Windows wohl zu langsam, und kann die Batchdatei nicht mehr rechzeig ausführen.
    Also habe ich ihn mit " Sleep(500); " erstmal ne halbe Sekunde warten lassen, bis er die Datei löschen soll:

    fstream f;
    f.open("cmd.cmd",ios::out);
    f << "start www.google.de" << endl;
    f << "exit" << endl;
    f.close();
    
    system("start cmd.cmd"); 
    Sleep(500);
    wxRemoveFile("cmd.cmd");
    

    Das klappt dann auch, aber jetzt tritt wieder das Problem mit den evtl. schon geöffneten Browsern auf.
    Wenn bereits ein Browser geöffnet ist, führt er den Befehl zwar richtig aus, aber es bleibt ein CMD-Fenster stehen. In dem steht dann noch der Befehl "start www.google.de" drin und sobald die Batch-Datei gelöscht ist logischerweise noch "Die Batch-Datei konnte nicht gefunden werden".

    Ich habe schon vieles ausprobiert, aber ich bin mit meinem Latein jetzt am Ende. Ich kriege dieses CMD-Fenster dann einfach nicht weg 😡

    Ich hoffe ihr könnt mir da helfen,
    MfG
    Kimi



  • system() suckt. Du glaubst portables ISO-C++ zu schreiben und dabei ist das übergebene Kommando alles andere als portabel.

    Wenn du mit dem OS interagieren willst dann verwende eine portable API dazu oder gleich die OS-eigene API (dann ist wenigstens die Nicht-Portabilität sichtbar).

    Deine BAT-Datei fixiert dich sowieso auf Windows...

    Also verwende doch gleich eine ordentliche Funktion: ShellExecute() zB (siehe MSDN für mehr).

    MfG SideWinder



  • Hallo

    Siehe zum Beispiel hier (für Windows).

    Da du offenbar wxWidgets benutzt, kannst du aber auch gleich die entsprechende Framework-Funktion ::wxLaunchDefaultBrowser benutzen.

    bis bald
    akari


Log in to reply