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

本文关键字:窗口 浏览器 选项 链接 Process Start | 更新日期: 2023-09-27 18:35:39

我正在尝试从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自己的可链接链接,它每次都会打开一个新窗口,所以也许连Microsoft都做不到。 嗯。

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

对于 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/");
    }
}

Process.Start:这很可能是做不到的。可执行文件需要支持命令行选项,这些选项允许您选择选项卡并执行导航。我在任何浏览器中都没有看到任何此类支持:铬;IE 或 Firefox

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

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

单击时,控件将传递给 LinkClicked 事件,代码使用以下方法调用默认>浏览器:

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