我正在尝试弄清楚如何使菜单条项目将活动Windows帐户默认浏览器打开到其主页。我尝试了Process.Start("about:blank")
,由于某种原因,这始终会打开Internet Explorer的about:blank页面。 (我将谷歌浏览器作为我的默认浏览器,其中http://www.duckduckgo.com作为Windows 7 Pro上的主页。)
我知道我可以指定任何URL来打开默认浏览器,但是如何让他们选择的主页打开?我发现一些基于C#的文章需要查看注册表项,以便根据每个浏览器查找所选主页。在VB.Net 2017中,该过程是否相同/类似,我将如何进行?这是使用VB.Net 2017社区版,该项目是Windows.Forms桌面应用程序。
答案 0 :(得分:0)
我找到的唯一方法是手动查询注册表有关处理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)
答案 1 :(得分:0)
找到一些线索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
将返回带路径的run命令。
添加一些代码以提取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)
答案 2 :(得分:-1)
你可以试试这个:
Process.Start("your_url_here eg. www.homepage.com etc.")
并且,如果它是您的默认浏览器,则会以谷歌浏览器打开。