Как открыть браузер пользователя по умолчанию и открыть домашнюю страницу пользователя?
Я пытаюсь выяснить, как заставить элемент "Строка меню" открыть браузер по умолчанию активных учетных записей Windows на их домашней странице. я пытался Process.Start("about:blank")
и по какой-то причине это всегда открывает Internet Explorer about: пустую страницу. (В качестве браузера по умолчанию используется Google Chrome с http://www.duckduckgo.com/ качестве домашней страницы на Windows 7 Pro.)
Я знаю, что могу указать любой URL, чтобы открыть браузер по умолчанию, но как открыть выбранную домашнюю страницу? Я нашел несколько статей, основанных на C#, которые требовали просмотра записей реестра, чтобы найти выбранную ими домашнюю страницу для каждого браузера. Будет ли этот процесс таким же / похожим в VB.Net 2017 и как мне поступить? Это использует VB.Net 2017 Community Edition, и проект представляет собой настольное приложение Windows.Forms.
3 ответа
Единственный способ, который я нашел, - это вручную запросить в реестре команду по умолчанию для обработки протокола http.
Первая строка этого кода вернет что-то вроде "C:\Program Files\Your Browser\browser.exe" -osint -url "%1"
, так что вы хотите заменить %1
на вашей целевой странице.
Тогда, если вы хотите использовать Process.Start
с аргументами командной строки, первый параметр будет командой, а второй - аргументами. Таким образом, нам нужно разделить строку реестра между командой и списком аргументов. Регулярное выражение сделает эту работу.
Я пропустил нулевые проверки и регулярное выражение для ясности.
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)
Нашел некоторые подсказки здесь.
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)
Вы можете попробовать это:
Process.Start("your_url_here eg. www.homepage.com etc.")
и это откроется с Google Chrome, если ваш браузер по умолчанию.