15

The following code opens a link in an existing browser window when browserExe is pointing to Firefox, Safari or Chrome. When pointing to IEXPLORE.EXE (IE7) a new windows is opened.

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

This opens a tab in an existing window as intended, when IE is the default browser.

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

How to i reuse an existing IE windows, when IE is NOT the default browser?

1 Answer 1

29

Using shdocvw library (add reference to it, you can find it in windows\system32) you can get the list of instances and call navigate with the newtab parameter:

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 some cases you may have to check if the shellwindow corresponds to a real iexplorer an not to any other windows shell (in w7 all instances are returned, don't know now for others).

 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 } 

You may also find these additional IE Navigate Flags useful. Full description of the flags are available at 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 }; 
Sign up to request clarification or add additional context in comments.

6 Comments

Works like a charm. Any idea how to find the last used browser window from the Enumerator? (Same behavior as when clicking on links in emails etc.)
This doesnt open the new tab in IE itself but your default browser (ie in case IE is already opened). Still good work..
i can't believe how different ie is from default behaviour of Chrome and firefox. headache
For those who couldn't find the reference, it's under COM, and it's called Microsoft Internet Controls. Another example of this solution can be found here: thepicketts.org/2013/05/…
has anyone tested this for apps launching browser from inside Citrix from to user's desktop?
|

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.