我正在尝试弄清楚如何使菜单条项打开活动Windows帐户默认浏览器到其主页。我已经尝试过Process.Start("about:blank")
,出于某种原因,这总是打开Internet Explorer的about:空白页面。(我将谷歌浏览器作为我的默认浏览器,http://www.duckduckgo.com 作为Windows 7 Pro的主页。
我知道我可以指定任何URL来打开默认浏览器,但是如何打开他们选择的主页?我发现一些基于 C# 的文章需要查看注册表项,以便为每个浏览器找到他们选择的主页。2017 年 VB.Net 的过程是否相同/相似,我将如何去做?这是使用 VB.Net 2017 社区版,该项目是一个 Windows.Forms 桌面应用程序。
我发现的唯一方法是手动查询注册表中有关处理http协议的默认命令的信息。
此代码的第一行将返回类似"C:Program FilesYour Browserbrowser.exe" -osint -url "%1"
的内容,因此您希望将%1
替换为目标页面。
然后,如果要将Process.Start
与命令行参数一起使用,则第一个参数将是命令,第二个参数是参数。 因此,我们需要在命令和参数列表之间拆分注册表字符串。正则表达式将完成这项工作。
为了清楚起见,我省略了空检查和正则表达式成功。
Dim cmd = CStr(Registry.ClassesRoot.OpenSubKey("httpshellopencommand").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)
在这里找到了一些线索。
Dim readValue As String = My.Computer.Registry.GetValue("HKEY_CURRENT_USERSoftwareMicrosoftWindowsShell
AssociationsUrlAssociationshttpUserChoice", "Progid", Nothing).ToString
将为当前用户的浏览器提供标识符。
Dim path As String = My.Computer.Registry.GetValue("HKEY_CLASSES_ROOT"
& readValue & "shellopencommand", "", 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)
你可以试试这个:
Process.Start("your_url_here eg. www.homepage.com etc.")
而且,如果它是您的默认浏览器,这将使用谷歌浏览器打开。