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
};
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
funcionó como se describe. ¡Gracias! –
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