【问题标题】:How do I open a user's default browser open to the users homepage?如何打开用户主页的默认浏览器?
【发布时间】:2018-10-19 13:19:42
【问题描述】:

我试图弄清楚如何使菜单条项目打开活动的 Windows 帐户默认浏览器到他们的主页。我试过Process.Start("about:blank") 并且由于某种原因这总是打开Internet Explorer 的about:blank 页面。 (我在 Windows 7 Pro 上将 Google Chrome 作为默认浏览器,http://www.duckduckgo.com 作为其主页。)

我知道我可以指定任何 URL 来打开默认浏览器,但是如何让他们选择的主页打开?我发现一些基于 C# 的文章需要查看注册表项,以便在每个浏览器中找到他们选择的主页。 VB.Net 2017 中的过程是否相同/相似,我将如何去做?这是使用 VB.Net 2017 社区版,该项目是一个 Windows.Forms 桌面应用程序。

【问题讨论】:

  • 如果你尝试在Process.Start 中放一个http 地址,它仍然用IE 打开吗?
  • 不,它会在我的用户帐户的默认浏览器中打开,它应该是 Google 的 Chrome。不过,这并没有打开我选择的主页,它只是打开了那个 URL。此操作与我笔记本电脑上的其他用户帐户不同。那里的默认浏览器是 Microsft Ege,它会按原样打开定向 URL,但它又不是主页。
  • 默认浏览器是打开.html文件的浏览器。您可以使用AssocQueryString 找到开启者。 Sample code here。当您通过“名称”打开默认浏览器时,它会显示主页。
  • @Jimi,从我所见,您的解决方案似乎是最优雅的,但“AssocQuerySrin”似乎是一个 C++ 命令,我使用的是 VB.Net。我不知道如何将 C++ 命令合并到 VB.Net 中。它可以在 VB 中工作吗?
  • 我在这里写了“示例代码”,这是一个链接到 VB.net 示例代码来实现这一点。这是我的,所以如果您对此有任何疑问,没问题。

标签: vb.net winforms process.start default-browser website-homepage


【解决方案1】:

我找到的唯一方法是手动向注册表查询处理http协议的默认命令。

此代码的第一行将返回类似"C:\Program Files\Your Browser\browser.exe" -osint -url "%1" 的内容,因此您希望将%1 替换为您的目标网页。

然后,如果您想将Process.Start 与命令行参数一起使用,第一个参数将是命令,第二个参数是参数。 因此,我们需要在命令和参数列表之间拆分注册表字符串。正则表达式将do this job

为了清楚起见,我省略了空检查和正则表达式成功。

Dim cmd = CStr(Registry.ClassesRoot.OpenSubKey("http\shell\open\command").GetValue(String.Empty))
cmd = cmd.Replace("%1","about:blank")
Dim r = new Regex("^""([^""]+)"" (.*)")
Dim m = r.Match(cmd)
Process.Start(m.Groups(1).Value, m.Groups(2).Value)

【讨论】:

    【解决方案2】:

    找到一些线索here

    Dim readValue As String = My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\
    Associations\UrlAssociations\http\UserChoice", "Progid", Nothing).ToString
    

    将为当前用户的浏览器提供一个标识符。

    Dim path As String = My.Computer.Registry.GetValue("HKEY_CLASSES_ROOT\"
    & readValue & "\shell\open\command", "", Nothing).ToString
    

    将返回带有路径的运行命令。

    添加一些代码以提取 EXE 并在不带参数的情况下运行它,例如;

     Dim DivArr As Char() = {Chr(34), "\"c}
    'split into segments using quotes and back-slash seperators
     Dim parts() As String = path.Split(DivArr)
     'find first segment with period/full-stop
     Dim Executable As String = Array.Find(parts, Function(x) (x.Contains(".")))
    
    Process.start(Executable) 
    

    【讨论】:

      【解决方案3】:

      你可以试试这个:

      Process.Start("your_url_here eg. www.homepage.com etc.")
      

      并且,如果它是您的默认浏览器,它将使用 google chrome 打开。

      【讨论】:

      • 你主页的网址是什么?
      • OP 说它不适用于 'about:blank',这是他问题的重点
      • 我的桌面(Windows 7 专业版)主页的 URL 是我在硬盘上创建的本地页面,是 [file:///C:/Startpage/default.htm] 和它的默认值浏览器是 Google Chrome,但在我的笔记本电脑上,默认浏览器是 Windows 10 上的 Microsoft Edge,主页设置为 http://www.acer.msn.com。我可以将 VB.Net 项目设置为打开我想要的任何网页,但显然是实际主页除外,直到我尝试了其中一些答案和 cmets。
      猜你喜欢
      • 2011-11-19
      • 1970-01-01
      • 2011-07-01
      • 1970-01-01
      • 2021-10-09
      • 2012-02-04
      • 1970-01-01
      • 2021-03-26
      相关资源
      最近更新 更多