Как открыть браузер пользователя по умолчанию и открыть домашнюю страницу пользователя?

Я пытаюсь выяснить, как заставить элемент "Строка меню" открыть браузер по умолчанию активных учетных записей 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, если ваш браузер по умолчанию.

Другие вопросы по тегам