warten, dass der gestartete browser beendet wurde.



  • Liebes Forum:

    ich möchte aus meiner Anwendung heraus den Standardbrowser öffnen und solange
    die Anwendung einfrieren, bis dieser Browser wieder geschlossen wird.

    mit folgendem Code habe ich es probiert:

    browser und startparameter sind 2 CStrings die aus der registry HKEY_CLASSES_ROOT\http\shell\open\command
    gelesen und auseinandergenommen wird um den standardbrowser zu ermitteln

    PROCESS_INFORMATION ProcessInfo;
      STARTUPINFO StartupInfo;
      ZeroMemory(&StartupInfo, sizeof(StartupInfo));
      StartupInfo.cb = sizeof StartupInfo ;
      if(CreateProcess(browser, startparameter.GetBuffer(startparameter.GetLength()),NULL,NULL,FALSE,0,NULL,NULL,&StartupInfo,&ProcessInfo))
      {
        WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
        CloseHandle(ProcessInfo.hThread);
        CloseHandle(ProcessInfo.hProcess);
      }
      else
      {
        AfxMessageBox("Browser kann nicht gestartet werden...");
      }
    

    In meinem Testfall ist der Browser "Firefox 3.0.3" öffnet sich und auch die gewünschte webseite wird angezeigt.

    Jedoch:
    kommt das WaitFor.... sofort zurück, wenn der Browser bereits geöffnet war.
    ich vermute mal, dass der prozess endet, wenn der einen neuen Tab anlegt.

    Da klappt aber, wenn vorher kein browserfenster offen war.

    Hat jemand ne Idee, wie ich es jetzt hinbekomme, unabhägig davon, ob der browser bereits läuft oder nicht, mitzubekommen, wann der Browser, oder von mir aus auch das "tab" geschlossen wird?

    Danke!



  • huuhuu

    keine antworten? 😞

    hab ich das Problem nicht verständlich genug beschrieben, oder hat keiner eine Idee?

    Meine Vermutung:

    Wenn der Browser bereits läuft, startet ein neuer Prozess der zunächst den laufenden findet und dort einen neuen thread initialisiert und sich dann wieder beendet. Könnte das sein?

    Für Anregungen nach denen ich mal recherchieren könnte wär ich dankbar.
    Danke schön,

    Smeagol



  • Smeagol schrieb:

    kommt das WaitFor.... sofort zurück, wenn der Browser bereits geöffnet war.
    ich vermute mal, dass der prozess endet, wenn der einen neuen Tab anlegt.

    Deine Vermutung mag stimmen...

    Smeagol schrieb:

    Da klappt aber, wenn vorher kein browserfenster offen war.

    Logischerweise... da ja jetzt der Prozess wirklich läuft und sich nicht doch wieder gleich beendet...

    Warum zeigst Du die Web-Seite nicht in Deiner eigenen Anwendung an (einfach das Web-Control einbinden)? Dann umgehst Du die ganzen Probleme...



  • Würd ich gerne, jedoch ist das eine webapplication eines fremdherstellers und dem Anwender soll diesbezüglich freie Wahl des Browser gelassen werden.

    der aufruf führt zu einem ergebnis was ich mit dann beim Beenden des browsers abrufe.

    Theoretisch könnte ich ständig "pollen" bis ein Ergebnis vorliegt.
    Durch die Überwachung des Browsers könnte ich dies jedoch vermeiden.

    Irgendwelche Anregungen?

    Danke.


  • Mod

    Du hast keinerlei Chance, wenn Du jeden Browser zulassen wilst.
    Der IE lässt sich hosten und auch perfekt per OLE Automation steuern. Du hättest hier die volle Kontrolle. Das kann man von den anderen Browsern in keinem Fall sagen.
    Ich wüsste nicht wie man den Firefox erfolgreich per OLE Automation ansteuert...

    Du müsstest also für jeden Browser eine eigene Steuerung bauen.

    Hoste den IE als ActiveX das ist simpel und einfach und dann hast Du wirklich die Kontrolle.


Anmelden zum Antworten