Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从C在现有IE窗口的选项卡中启动URL#_C#_.net_Internet Explorer - Fatal编程技术网

C# 从C在现有IE窗口的选项卡中启动URL#

C# 从C在现有IE窗口的选项卡中启动URL#,c#,.net,internet-explorer,C#,.net,Internet Explorer,当browserExe指向Firefox、Safari或Chrome时,以下代码将在现有浏览器窗口中打开一个链接。当指向IEXPLORE.EXE(IE7)时,将打开一个新窗口 ProcessStartInfo pi = new ProcessStartInfo(browserExe, url); Process.Start(pi); 当IE是默认浏览器时,这将按预期在现有窗口中打开一个选项卡 ProcessStartInfo pi = new ProcessStartInfo(url); Pr

当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 windows?

使用shdocvw库(添加对它的引用,您可以在windows\system32中找到它)可以获取实例列表,并使用newtab参数调用navigate:

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 shell(在w7中,所有实例都返回,其他实例现在不知道)

您可能还发现这些附加IE导航标志很有用。有关这些标志的完整说明,请访问


工作起来很有魅力。知道如何从枚举器中找到上次使用的浏览器窗口吗?(与单击电子邮件等中的链接时的行为相同)这不会在IE中打开新选项卡,但会打开默认浏览器(如果IE已打开)。仍然很好。我不敢相信ie与Chrome和firefox的默认行为有多大的不同。头痛对于那些找不到参考资料的人来说,它在COM下,叫做微软互联网控制。这个解决方案的另一个例子可以在这里找到:有人测试过从Citrix内部到用户桌面启动浏览器的应用程序吗?
   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
   }
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 
};