如何从Process.Start打开到同一浏览器窗口或选项卡的链接?

时间:2014-12-30 23:18:51

标签: c# .net winforms

我正在尝试从Windows窗体上的LinkLabel打开浏览器窗口。单击时,控件将传递给LinkClicked事件,代码将使用以下命令调用默认浏览器:

System.Diagnostics.Process.Start("http://www.google.com");

我希望能够点击链接(即多次运行“开始”),但只能进入同一个浏览器窗口或标签页。当然,多次点击每次都会为Google打开一个新标签。我知道如何使用如下链接指定命名窗口:

<a href="http://www.google.com" target="googlewin">Click Here!</a>

但是如何在“开始”命令中执行此操作?

ETA:我在“关于”表单上点击了Internet Explorer自己的可链接链接,每次都会打开一个新窗口,所以甚至微软也许都无法做到这一点。嗯。

3 个答案:

答案 0 :(得分:1)

对于Internet Explorer,您可以使用SHDocVw程序集执行此操作。

而不是使用process.start只需创建SHDocVw.InternetExplorer的实例,并使用它在任何需要时在同一浏览器中导航。这是一个简单的例子。

private SHDocVw.InternetExplorer IE;

private void Form1_Load(object sender, EventArgs e)
  {
     IE = new SHDocVw.InternetExplorer();
     IE.Navigate("http://stackoverflow.com/");
     IE.Visible = true;
  }

private void button1_Click(object sender, EventArgs e)
  {
     IE.Navigate("http://google.com/");
  }

如果您特别希望使用Process.start,那么对于Internet Explorer,您可以遍历SHDocVw.ShellWindows以找到您希望用于导航的Internet Explorer。

foreach (SHDocVw.InternetExplorer IE in new SHDocVw.ShellWindows()) {
    if (IE.FullName.ToLower.Contains("iexplore") & IE.LocationURL.ToLower.Contains("someurl")) {
        IE.Navigate("http://google.com/");
    }
}

答案 1 :(得分:0)

沟渠Process.Start:它很可能无法完成。可执行文件需要支持命令行选项,允许您选择选项卡并执行导航。我在任何浏览器中都没有看到任何此类支持:Chrome; IEFirefox

我能想到的唯一合理的选择是使用已发布的互操作机制来处理浏览器窗口。有了浏览器窗口后,您可以编写脚本来设置窗口位置。使用此方法,您需要使用WebBrowser控件或Awesomium之类的内容。

答案 2 :(得分:0)

我觉得你正以错误的方式接近这个。

  

单击时,控件将传递给LinkClicked事件,代码将使用以下命令调用默认的&gt;浏览器:

实际上,它不会调用默认浏览器,而是创建默认浏览器的新实例。是的,您可以获得新创建的流程的句柄,并使用相当复杂的方式添加更多选项卡,但这种做法将重新发明轮子。您最好的选择是创建自己的 WebBrowser 控件。 Process.Start是一种创建新流程的方法,不应该用作更改已经运行的流程的方法。