Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Mehrere Instanzen des IE aufrufen? (https://www.delphipraxis.net/108439-mehrere-instanzen-des-ie-aufrufen.html)

taaktaak 13. Feb 2008 18:45


Mehrere Instanzen des IE aufrufen?
 
Moin, Moin.

In meinem Programm soll unter anderem die Möglichkeit bestehen, Internet-Seiten aufzurufen. Das funktioniert z.B. mit folgenden Aufrufen ohne Probleme:

Delphi-Quellcode:
WinExec(PChar('rundll32 url.dll, FileProtocolHandler '+WebAdresse),SW_Normal);

// etwas moderner...

ShellExecute(Application.Handle,'open',PChar(WebAdresse),nil,nil,SW_Normal);
Unangenehm ist allerdings, dass ich die Möglichkeit haben möchte mehrere Internet-Seiten gleichzeitig aufrufen zu können (wozu hat man sonst ein Multi-Monitor-System) - die oben gezeigten Lösungen erzeugen aber bei erneutem Aufruf keine neue Instanz des InternetExplorers, sondern laden die angegebene Adresse in die bereits geöffnete Instanz.

Gibt es eine Möglichkeit meinen Wunsch, mehrere Instanzen öffnen zu können, zu realisieren?

bluesbear 13. Feb 2008 19:31

Re: Mehrere Instanzen des IE aufrufen?
 
Moin taaktaak,

mehrere Instanzen geht glaub ich gar nicht, aber vielleicht kann man dem bereits laufenden IE irgendwie mitteilen, eine Website in einem neuen Fenster bzw. Tab zu öffnen?
:gruebel:

dominikkv 13. Feb 2008 19:48

Re: Mehrere Instanzen des IE aufrufen?
 
Zitat:

Zitat von bluesbear
Moin taaktaak,

mehrere Instanzen geht glaub ich gar nicht, aber vielleicht kann man dem bereits laufenden IE irgendwie mitteilen, eine Website in einem neuen Fenster bzw. Tab zu öffnen?
:gruebel:

ich glaube das ist sein Problem... der macht das automatisch

taaktaak 13. Feb 2008 20:03

Re: Mehrere Instanzen des IE aufrufen?
 
Moin, Moin,

nach ein wenig basteln im DOS-Fenster bin ich der Lösung wohl näher gekommen. Mit einer kleinen Modifikation bei ShellExecute() wird mit jedem Aufruf eine neue Instanz erzeugt:

Delphi-Quellcode:
ShellExecute(Application.Handle,
             'open',
             PChar('IEXPLORE.EXE'),
             PChar(SelectedItem),
             nil,
             SW_ShowNormal);
Die Lösung ist natürlich so nicht wirklich verwendbar, da ich hier den Namen des Internetbrowsers angeben muss - und damit ist der Code leider nicht allgemeingültig. So ergibt sich eine leicht abgeänderte Fragestellung:

Woher bekomme ich den Namen des "Standard-Browsers"?

// edit : Schätze, das ist ein Fall für die Registry. Da wird das wohl irgendwo drin stehen. Aber nicht mehr heute :|

taaktaak 13. Feb 2008 21:00

Re: Mehrere Instanzen des IE aufrufen?
 
So, was stört ich mein Geschwätz von vorhin. Folgendes scheint jetzt zu funktionieren:

Delphi-Quellcode:
procedure Tfo~~.CallInternetAddress(URL:String;Multiple:Boolean);

  function DefaultBrowser:String;
  var Reg : TRegistry;
  begin
    Reg:=TRegistry.Create(KEY_READ);
    try
      Reg.RootKey:=HKEY_CLASSES_ROOT;
      if Reg.OpenKeyReadOnly('\htmlfile\shell\open\command') then
        Result:=Reg.ReadString('');
      if Result[1]='"' then begin
        delete(Result,1,1);
        Result:=copy(Result,1,pos('"',Result)-1);
        end;
    finally
      Reg.Free;
      end;
  end;

begin
  if Multiple then ShellExecute(Handle,
                                'open',
                                PChar(DefaultBrowser),
                                PChar(URL),
                                nil,
                                SW_ShowNormal)
 
              else ShellExecute(Handle,
                                'open',
                                PChar(URL),
                                nil,
                                nil,
                                SW_ShowNormal)
end;
Hoffentlich ist das ein Schlüssel, der in allen Windows-Versionen passt. Für XP ist es offenbar der Richtige. Mit Aufruf kann nun bestimmt werden, ob die URL in einer neuen Instanz geöffnet werden soll. Zusätzlich wäre noch nett, Position und Größe des Browserfensters festzulegen - aber diese Erweiterung ist ja keine große Aktion...


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz