2010-09-14 4 views
10

Der folgende Code öffnet einen Link in einem vorhandenen Browserfenster, wenn BrowserExe auf Firefox, Safari oder Chrome verweist. Wenn auf IEXPLORE.EXE (IE7) gezeigt wird, wird ein neues Fenster geöffnet.Starten einer URL in einer Registerkarte in einem vorhandenen IE-Fenster von C#

ProcessStartInfo pi = new ProcessStartInfo(browserExe, url); 
Process.Start(pi); 

Dies öffnet eine Registerkarte in einem vorhandenen Fenster wie vorgesehen, wenn IE der Standardbrowser ist.

Wie kann ich ein vorhandenes IE-Fenster wiederverwenden, wenn IE NICHT der Standardbrowser ist?

Antwort

22

Mit Shdocvw Bibliothek (Add Verweis darauf, Sie es in Windows \ System32 finden) die Liste der Instanzen bekommen und mit dem newtab Parameter navigieren rufen:

ShellWindows iExplorerInstances = new ShellWindows(); 
if (iExplorerInstances.Count > 0) 
{ 
    IEnumerator enumerator = iExplorerInstances.GetEnumerator(); 
    enumerator.MoveNext(); 
    InternetExplorer iExplorer = (InternetExplorer)enumerator.Current; 
    iExplorer.Navigate(url, 0x800); //0x800 means new tab 
} 
else 
{ 
    //No iexplore running, use your processinfo method 
} 

Edit: in In einigen Fällen müssen Sie prüfen, ob das Shellfenster einem echten iexplorer und keiner anderen Windows-Shell entspricht (in w7 werden alle Instanzen zurückgegeben, weiß es jetzt nicht für andere).

bool found=false; 
    foreach (InternetExplorer iExplorer in iExplorerInstances) 
    { 
     if (iExplorer.Name == "Windows Internet Explorer") 
     { 
      iExplorer.Navigate(ur, 0x800); 
      found=true; 
      break; 
     } 
    } 
    if(!found) 
    { 
     //run with processinfo 
    } 

Sie können diese zusätzlichen IE Navigate Flags auch nützlich finden. Ausführliche Beschreibung der Flaggen sind unter http://msdn.microsoft.com/en-us/library/dd565688(v=vs.85).aspx

enum BrowserNavConstants 
{ 
    navOpenInNewWindow = 0x1, 
    navNoHistory = 0x2, 
    navNoReadFromCache = 0x4, 
    navNoWriteToCache = 0x8, 
    navAllowAutosearch = 0x10, 
    navBrowserBar = 0x20, 
    navHyperlink = 0x40, 
    navEnforceRestricted = 0x80, 
    navNewWindowsManaged = 0x0100, 
    navUntrustedForDownload = 0x0200, 
    navTrustedForActiveX = 0x0400, 
    navOpenInNewTab = 0x0800, 
    navOpenInBackgroundTab = 0x1000, 
    navKeepWordWheelText = 0x2000, 
    navVirtualTab = 0x4000, 
    navBlockRedirectsXDomain = 0x8000, 
    navOpenNewForegroundTab = 0x10000 
}; 
+5

Funktioniert wie ein Charme. Irgendeine Idee, wie Sie das zuletzt verwendete Browserfenster vom Enumerator finden können? (Gleiches Verhalten wie beim Anklicken von Links in E-Mails etc.) – Fedearne

+0

funktionierte wie beschrieben! Vielen Dank! –

+0

Dies öffnet nicht die neue Registerkarte im IE selbst, sondern Ihren Standard-Browser (dh für den Fall, dass IE bereits geöffnet ist). Immer noch gute Arbeit .. – nawfal

Verwandte Themen