Как открыть браузер пользователя по умолчанию и открыть домашнюю страницу пользователя? - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь выяснить, как заставить элемент «Строка меню» открыть браузер активных учетных записей Windows по умолчанию на их домашней странице. Я пробовал Process.Start("about:blank"), и по какой-то причине это всегда открывает Internet Explorer's about: blank page. (В качестве браузера по умолчанию используется Google Chrome с http://www.duckduckgo.com в качестве домашней страницы в Windows 7 Pro.)

Я знаю, что могу указать любой URL, чтобы открыть браузер по умолчанию, но как открыть выбранную домашнюю страницу? Я нашел несколько статей, основанных на C #, которые требовали просмотра записей реестра, чтобы найти выбранную ими домашнюю страницу для каждого браузера Будет ли этот процесс таким же / похожим в VB.Net 2017 и как мне поступить? Это использует VB.Net 2017 Community Edition, и проект представляет собой настольное приложение Windows.Forms.

Ответы [ 3 ]

0 голосов
/ 09 мая 2018

Вы можете попробовать это:

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

, и это откроется с Google Chrome, если ваш браузер по умолчанию.

0 голосов
/ 09 мая 2018

Найдены некоторые подсказки здесь .

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) 
0 голосов
/ 09 мая 2018

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