gpt4 book ai didi

winforms - 启动默认的网络浏览器,但如果 URL 已经打开则不启动

转载 作者:行者123 更新时间:2023-12-02 00:21:39 25 4
gpt4 key购买 nike

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

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

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

最佳答案

这在某种程度上是一种解决方法,但它可能会让您入门。我使用了 System.Diagnostics.Process.ProcessId。以我用过IE为例,后面会解释为什么要这么做。代码只是“快速而肮脏”,但我只是将其作为概念证明。

我已经创建了一个基本的 WinForm 应用程序,它带有一个按钮,可以在 IE 中打开 google,如果应用程序已经打开它,它将不会再次打开。

我添加了 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
  • 显示 Internet 窗口(如果它已经打开)可以通过使用 SetForegroundWindow 属性来完成。因为这已经记录在 this article 中,我没有在此代码段中添加它。

希望这对您有所帮助。

关于winforms - 启动默认的网络浏览器,但如果 URL 已经打开则不启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10705353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com