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

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

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

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

 Click Here! 

但是我如何在Start命令中执行此操作?

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

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

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

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

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

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

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

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

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