2015-09-02 1 views
3

В версиях Windows, до Windows 10, я могу получить браузер по умолчанию из следующего раздела реестра:Как найти браузер по умолчанию с помощью реестра на Windows 10

HKEY_CURRENT_USER\SOFTWARE\Clients\StartMenuInternet 

В Windows 10, я установил Microsoft Edge как браузер по умолчанию. Но я не вижу никаких изменений в разделе реестра выше.

Однако в предыдущих версиях Windows он работал правильно.

Как я могу получить браузер по умолчанию в Windows 10?

+0

fiddling с реестром на окнах ВСЕГДА наихудшая возможная вещь - и ее почти всегда совершенно не нужно. Как уже упоминалось, [Desktop API] (https://docs.oracle.com/javase/7/docs/api/java/awt/Desktop.html) является хорошим выбором, но обязательно оцените [isDesktopSupported ] (https://docs.oracle.com/javase/7/docs/api/java/awt/Desktop.html#isDesktopSupported()) – specializt

+0

@specialist: Спасибо, я хочу запустить URL-адрес определенным браузером, который установлен на моем компьютере. Я изучаю, но я не вижу поддержки API для обнаружения браузеров по java-коду ... –

+0

, потому что его невозможно, независимо от используемого языка. – specializt

ответ

6

Технически StartMenuInternet не является браузером по умолчанию, он просто определяет, как система реагировала, когда вы нажали на значок Internet в меню «Пуск».

В Windows 10, обработка приложения по умолчанию выполняется с помощью клавиши выбора пользователя в:

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\Shell\Associations\URLAssociations\(http|https)\UserChoice 

где (http|https) является один из них, например, только http или просто https

Ключ ProgId ссылается на идентификатор приложения обработчика, который вызывается при вызове open для URL-адреса.

Значение ProgId можно найти по клавише в HKEY_CLASSES_ROOT, и вы ищете значение по умолчанию Shell/Open/command. Для большинства браузеров это будет простая ссылка на исполняемый файл. Вы должны быть в состоянии использовать ключ Application, чтобы получить ApplicationName и т.д.

Современные приложения будут ссылаться LaunchWinApp со значением DelegateExecute, который определяет фактическое приложение для запуска (это никогда не легко, не так ли?), В ApplicationName в том, что case - ссылка на ресурс в приложении (я не знаю, как читать эти значения).

однако, почему вы ищете эту информацию - если это просто открыть веб-страницу, то вы должны использовать Desktop API (начиная с Java 1.6), например:

Desktop.getDesktop().browse(new URI("http://msn.com")); 

Gross detail on how to read applications that support a specific url scheme:

В Windows управление приложениями по умолчанию определяется приложением Default Programs, это приложение считывает информацию, которую приложения размещают в реестре.

Есть два места, операционная система выглядит для зарегистрированных приложений:

HKEY_CURRENT_USER\SOFTWARE\RegisteredApplications 

и

HKEY_LOCAL_MACHINE\SOFTWARE\RegisteredApplications 

данные, касающиеся этих клавиш ссылки в соответствующее место в реестре коренится под тем же как ключ ResisteredApplications, на который вы смотрите.

например. при установке firefox он помещает запись там, помеченную Firefox, содержащую значение Software\Clients\StartMenuInternet\FIREFOX.EXE\Capabilities.Это относится к HKEY_LOCAL_MACHINE\…\Capabilities.

Когда вы смотрите под этим местоположением, вы увидите ключ URLAssociations, в котором указаны URL-адреса, которые он обрабатывает. Когда вы видите значения http и https, это делает очень вероятным, что это веб-браузер. Название приложений должно быть получено из значения ApplicationName в ключе Capabilities. Этот ключ может ссылаться на локализованные имена или быть локализованным именем на своем собственном. Определение значения из косвенности не является тривиальным (стоило бы его собственных вопросов).

Вы можете вернуться от значения url (например, http -> FirefoxURL) до HKEY_CLASSES_ROOT\FirefoxURL\Shell\Open\Command, чтобы получить исполняемый файл, снова вспомнив, что приложения new-ui являются особым случаем.

+0

Я хочу, чтобы список всех браузеров был установлен на моем компьютере, поэтому я думаю, что окно реестра может помочь мне .. У вас есть другой способ, который может обнаружить все браузер ??? –

+0

невозможно «обнаружить все браузеры», потому что такого API регистрации нет - только один HANDLER может быть зарегистрирован для одного протокола, и об этом. Windows - это не Android, если вы хотите найти определенные приложения, для которых вам нужно их явно искать - с помощью эвристических шаблонов пути и, возможно, содержимого каталога ... но это будет крайне ненадежным - даже поиск настроек реестра для конкретного производителя является крайне ненадежным. ... лучше всего забыть о своей задаче, потому что она никогда не будет работать на 100%. – specializt

+0

@specialist: Как насчет браузера по умолчанию? мы можем обнаружить/получить имя по умолчанию браузер из реестра или другим способом? –

Смежные вопросы