Технически 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 являются особым случаем.
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
@specialist: Спасибо, я хочу запустить URL-адрес определенным браузером, который установлен на моем компьютере. Я изучаю, но я не вижу поддержки API для обнаружения браузеров по java-коду ... –
, потому что его невозможно, независимо от используемого языка. – specializt