Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
270 views
in Technique[技术] by (71.8m points)

.net - Launch a URL in a tab in an existing IE window from C#

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Using shdocvw library (add reference to it, you can find it in windowssystem32) 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 
};

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...