2010-09-14 21 views
10

El siguiente código abre un enlace en una ventana de navegador existente cuando browserExe apunta a Firefox, Safari o Chrome. Cuando se apunta a IEXPLORE.EXE (IE7) se abre una nueva ventana.Lanzar una URL en una pestaña en una ventana de IE existente desde C#

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

Esto abre una pestaña en una ventana existente como se esperaba, cuando IE es el navegador predeterminado.

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

¿Cómo reutilizo una ventana IE existente, cuando IE NO es el navegador predeterminado?

Respuesta

22

El uso de la biblioteca shdocvw (añadir referencia a ella, se puede encontrar en windows \ system32) se puede obtener la lista de instancias y llamar a navegar con el parámetro newtab:

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 
} 

Editar: en en algunos casos, puede que tenga que comprobar si la ventana de shell corresponde a un explorador de iex real y no a ningún otro shell de Windows (en w7 se devuelven todas las instancias, no lo sé ahora para otras).

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 
    } 

También puede encontrar útiles estas IE Navigate Flags adicionales. La descripción completa de los indicadores está disponible en 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

Funciona como un encanto. ¿Alguna idea de cómo encontrar la última ventana del navegador usado del Enumerator? (El mismo comportamiento que al hacer clic en enlaces en correos electrónicos, etc.) – Fedearne

+0

funcionó como se describe. ¡Gracias! –

+0

Esto no abre la nueva pestaña en IE sí mismo pero su navegador predeterminado (es decir, en caso de que IE ya esté abierto). Todavía es un buen trabajo. – nawfal

Cuestiones relacionadas