【问题标题】:Get the default browser, check if open and send URL获取默认浏览器,检查是否打开并发送URL
【发布时间】:2017-11-23 02:50:00
【问题描述】:

WinForms 应用程序/RSS 新闻提要控件

我想要实现的是:

如果用户想从winApp的RSS新闻提要中打开一个URL,那么

  • 检查默认浏览器是否打开
  • 如果不是,则将 URL 发送给 Shell - 很清楚该怎么做。
  • 如果是,则将此 URL 发送到浏览器的新选项卡并激活浏览器和该选项卡。

所以,一般来说,1-st 和 3-rd 是我想问你的兴趣点。

【问题讨论】:

  • 你试过什么?您是否对第 1 点和第 3 点进行过任何研究或搜索?你被什么困住了?
  • 我知道如何获取默认浏览器名称,但是我必须通过进程列表来查找它是否打开,但我不知道确切的进程名称,如果它不是一个广泛使用的浏览器。好吧。如果我要解决该任务,那么如何向该活动进程发送打开 URL 的命令,而不是在新窗口中,而是在新选项卡中。
  • 您可以将 URL 发送到 shell.. 执行 explorer.exe "http://google.com" 以查看实际情况。如果您的默认浏览器已打开,它应该会自动打开一个新标签页。

标签: c# winforms shell


【解决方案1】:
System.Diagnostics.Process.Start(startUrl); 

仅此而已。它检查默认浏览器是否打开,如果没有打开它,然后在新选项卡中打开 url 并激活它。

【讨论】:

  • 是的,很好。没想到WinShell会替我做。上次我在 WinXP 中做同样的事情,目前还不清楚它是如何工作的,要么打开新窗口,要么只是新标签。现在我看到 W7 下的 Chrome 默认做了我需要的。凉爽的。谢谢
【解决方案2】:

你有什么理由需要做前两部分吗?为什么要关心默认浏览器是什么?你会改变你的工作吗?

你将 URL 发送到 shell 的目的是什么?

如果使用 .NET,并且在使用 Process 类时 - 向其传递链接时,它将使用默认浏览器。所以同一个应用程序可能会分别启动 Chrome 或 IE。

已经有另一个堆栈显示了如何执行此操作:Open a URL from Windows Forms

ProcessStartInfo sInfo = new ProcessStartInfo("http://example.com/");  
Process.Start(sInfo);

【讨论】:

  • 是的,很好。没想到WinShell会替我做。上次我在 WinXP 中做同样的事情,目前还不清楚它是如何工作的,要么打开新窗口,要么只是新标签。现在我看到 W7 下的 Chrome 默认做了我需要的。凉爽的。谢谢。
【解决方案3】:

这显然会因浏览器而异,但很明显您几乎没有对此进行任何研究,所以我将成为您的研究协助。

注意

一般情况下,您只需执行路径上的 URL,默认浏览器将打开一个新选项卡或根据需要启动。不应该做以下任何事情。在你的 CMD 窗口中执行 explorer.exe "http://google.com" 以查看它如何与各种默认浏览器一起使用。

回答

我用谷歌搜索了"How to detect the default browser C#",它产生了几个结果,第一个是How to find default web browser using C#? - 这有几个答案,第二个似乎是你想要的。

一旦您知道默认浏览器,您需要检查它是否打开。所以你需要为每个浏览器编译一个二进制名称列表(chrome 是chrome.exe),我们搜索"check if process is running C#",这给了我们How can I know if a process is running?

现在,我们知道浏览器是否正在运行。如果是,我们将有一个Process 实例——所以我们现在需要知道二进制位置(这很重要!)。所以我们搜索Get the path of a running process C#,得到C#: How to get the full path of running process?

每个浏览器都有自己的机制来打开新标签并接收焦点,但通常您需要使用一些参数来执行二进制文件。对于谷歌浏览器,答案在这里:https://superuser.com/questions/731467/command-line-option-to-open-chrome-in-new-window-and-move-focus

所以现在我们已经完成了 google chrome 浏览器的所有内容。对其他浏览器重复此操作,并进行类似研究以了解如何执行二进制文件以打开新选项卡。

如果您想要一个适用于所有浏览器的通用解决方案,这已经存在。只需执行explorer "yourUrl"

【讨论】:

  • 是的,很好。没想到WinShell会替我做。上次我在 WinXP 中做同样的事情,目前还不清楚它是如何工作的,要么打开新窗口,要么只是新标签。现在我看到 W7 下的 Chrome 默认做了我需要的。凉爽的。谢谢。
猜你喜欢
  • 2012-07-27
  • 1970-01-01
  • 2014-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-23
  • 2020-05-06
  • 1970-01-01
相关资源
最近更新 更多