Winforms 启动默认web浏览器,但如果URL已打开,则不启动
我的应用程序界面上有一个链接,它使用Winforms 启动默认web浏览器,但如果URL已打开,则不启动,winforms,browser,launching-application,Winforms,Browser,Launching Application,我的应用程序界面上有一个链接,它使用System.Diagnostics.Process.Start()启动一个URL。如果用户多次单击该链接,将打开多个选项卡 是否有一种方法(可能是命令行选项)仍然使用默认的web浏览器,但如果URL已打开,则让它重新打开同一选项卡?如果它不适用于所有可能的浏览器,那也没关系,但如果它至少适用于IE、Firefox和Chrome,那就更好了 我对此表示怀疑,但因为我没有看到关于这个话题的任何其他问题/答案,我想我应该问一下。这是一种解决方法,但可能会让你开始。
System.Diagnostics.Process.Start()
启动一个URL。如果用户多次单击该链接,将打开多个选项卡
是否有一种方法(可能是命令行选项)仍然使用默认的web浏览器,但如果URL已打开,则让它重新打开同一选项卡?如果它不适用于所有可能的浏览器,那也没关系,但如果它至少适用于IE、Firefox和Chrome,那就更好了
我对此表示怀疑,但因为我没有看到关于这个话题的任何其他问题/答案,我想我应该问一下。这是一种解决方法,但可能会让你开始。我已使用System.Diagnostics.Process.ProcessId。 作为我使用IE的一个例子,我将在后面解释我为什么这样做。代码只是“快速和肮脏”,但我只是把它作为概念的证明 我已经创建了一个基本的WinForm应用程序,其中有一个按钮可以在IE中打开google,如果应用程序已经打开它,它将不会再次打开 我添加了系统。诊断参考
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,因此这可能是前进的方向。您可以在此处查看如何执行此操作:
- 如果internet窗口已经打开,则可以使用SetForeGroundIndow属性显示该窗口。由于这已经在中进行了记录,所以我没有将其添加到此代码段中
我希望这能帮助您上路。好的解决方案,谢谢!由于IE对每个标签都使用了一个新的过程(通常),这甚至可能只跟踪您打开的标签。当然,该选项卡可能会打开其他网站,但这是一个很好的答案,因为没有简单的答案。可能需要使用OLE/COM才能更进一步,但这并不是我想要的(这个问题不值得这么多努力)。