我的应用程序 UI 上有一个链接,该链接使用System.Diagnostics.Process.Start()
. 如果用户多次单击该链接,则会打开多个选项卡。
有没有办法,也许是一个命令行选项,仍然使用默认的网络浏览器,但如果 URL 已经打开,它只是重新打开同一个选项卡?如果它不能与所有可能的浏览器一起使用,那会很好,但如果它至少可以与 IE、Firefox 和 Chrome 一起使用,那就太好了。
我对此表示怀疑,但由于我没有看到关于这个主题的任何其他问题/答案,我想我会问。
我的应用程序 UI 上有一个链接,该链接使用System.Diagnostics.Process.Start()
. 如果用户多次单击该链接,则会打开多个选项卡。
有没有办法,也许是一个命令行选项,仍然使用默认的网络浏览器,但如果 URL 已经打开,它只是重新打开同一个选项卡?如果它不能与所有可能的浏览器一起使用,那会很好,但如果它至少可以与 IE、Firefox 和 Chrome 一起使用,那就太好了。
我对此表示怀疑,但由于我没有看到关于这个主题的任何其他问题/答案,我想我会问。
这在某种程度上是一种解决方法,但它可能会让您入门。我使用了 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;
}
这并不能完全满足您的要求,但它可能是一个好的开始。我这样做有几个原因以及可能的选择是什么..
我希望这有助于您顺利上路。