启动默认Web浏览器,但如果URL已打开则不启动

时间:2012-05-22 15:39:32

标签: winforms browser launching-application

我的应用UI上有一个链接,可以使用System.Diagnostics.Process.Start()启动网址。如果用户多次单击该链接,则会打开多个选项卡。

有没有办法,也许是命令行选项,仍然可以使用默认的网络浏览器,但是如果网址已经打开,它只是重新打开相同的标签?如果它不适用于所有可能的浏览器,那就没关系,但如果它至少适用于IE,Firefox和Chrome,那就太好了。

我对此表示怀疑,但由于我没有看到关于这个主题的任何其他问题/答案,我想我会问。

1 个答案:

答案 0 :(得分:3)

这有点像一种解决方法,但它可能会让你开始。我使用过System.Diagnostics.Process.ProcessId。 作为一个例子我使用IE,稍后我将解释为什么我这样做。代码只是“快速而肮脏”,但我只是将其作为概念证明。

我创建了一个基本的WinForm应用程序,其中一个按钮将在IE中打开谷歌,如果它已经被应用程序打开,它将不再被打开。

我添加了System.Diagnostics参考。

    public int ProcessID;
    public Form1()
    {
        InitializeComponent();
    }
    private void MyButton_Click(object sender, EventArgs e)
    {
        if (ProcessID == null)
        {
            StartIE();
        }
        else
        {
            if (!ProcessIsRunning())
            {
                StartIE();
            }
        }
    }
    private bool ProcessIsRunning()
    {
        bool ProcessRunning = false;
        foreach (Process p in Process.GetProcesses())
        {
            try
            {
                if (p.Id == ProcessID)
                {
                    ProcessRunning = true;
                }
            }
            catch { }
        }
        return ProcessRunning;
    }
    private void StartIE()
    {
        System.Diagnostics.Process proc = new System.Diagnostics.Process();
        proc.StartInfo.FileName = "iexplore.exe";
        proc.StartInfo.Arguments = "http://www.google.be";
        proc.Start();
        ProcessID = proc.Id;
    }

这并不完全符合你的要求,但它可能是一个好的开始。我这样做的原因有几个,可能的选择是什么......

  • 如果您使用url作为文件名,它确实会在默认浏览器中打开网页,但它不会返回processID。这就是为什么该片段显示了IE的用法。 (如果您使用此选项,则可以使用System.IO.File.Exists确保安装了所需的浏览器)
  • 如果您想使用此选项,您可以查询注册表以获取默认浏览器,如果您有,则可以从注册表中获取的值启动它。如果然后将process.startinfo.filename更改为此值,那么您将启动默认浏览器,但仍将获得processId,因此这可能是前进的方法。您可以在此处查看如何执行此操作:http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/b200903e-ce69-4bd4-a436-3e20a7632dc4
  • 如果已经打开了互联网窗口,可以使用SetForegroundWindow属性来完成。由于this article中已经记录了这一点,因此我没有将其添加到此代码段中。

我希望这有助于让你继续前进。