Запустите URL на вкладке в существующем окне IE из C # - PullRequest
11 голосов
/ 15 сентября 2010

Следующий код открывает ссылку в существующем окне браузера, когда browserExe указывает на Firefox, Safari или Chrome. При указании на IEXPLORE.EXE (IE7) открываются новые окна.

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

Это открывает вкладку в существующем окне, как и предполагалось, когда IE является браузером по умолчанию.

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

Как повторно использовать существующие окна IE, если IE НЕ является браузером по умолчанию?

1 Ответ

24 голосов
/ 15 сентября 2010

Используя библиотеку shdocvw (добавить ссылку на нее, вы можете найти ее в windows \ system32), вы можете получить список экземпляров и вызвать навигацию с параметром 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
}

Редактировать: в некоторых случаях вам может потребоваться проверить, соответствует ли shellwindow реальному iexplorer, а не какой-либо другой оболочке Windows (в w7 возвращаются все экземпляры, теперь не знаю для других).

   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
   }

Эти дополнительные флаги IE Navigate могут также оказаться полезными. Полное описание флагов доступно на 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 
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...