TL; DR: если существует HKEY_CURRENT_USER\Software\Clients\StartMenuInternet\
, прочитайте это; в противном случае читать HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\
.
Прочитав ответы здесь, я нашел небольшое понимание того, как определить браузер по умолчанию, поэтому я провел несколько экспериментов и исследований, чтобы выяснить это. Я скачал исходный код Firefox, написал скрипт, который читает кучу записей реестра, а также запустил Process Explorer, все время меняя браузер по умолчанию.
Я обнаружил, что существует множество разделов реестра, которые Firefox и Chrome изменяют, когда каждый из них устанавливает себя в качестве браузера по умолчанию. Я считаю, что Safari и Opera похожи по поведению. IE, кажется, изменяет только один из ключей реестра, которые я смотрел.
Я обнаружил, что, хотя большинство браузеров изменяют другие пути реестра, все браузеры меняют HKEY_CURRENT_USER\Software\Clients\StartMenuInternet\
(default)
Вот значение реестра из раздела реестра HKEY_CURRENT_USER\Software\Clients\StartMenuInternet\
(default)
, в то время как каждый браузер является браузером по умолчанию.
- IE 9.0.8112.16421:
IEXPLORE.EXE
- Хром 21.0.1180.60 м:
Google Chrome
- Firefox 10.0.2:
FIREFOX.EXE
- Safari 3.2.2:
Safari.exe
- Опера 12.01:
Opera
Протестировано на Microsoft Windows 7 Home Premium SP1 64-битная
Edit:
Я нашел на новой установке Windows XP SP3 HKEY_CURRENT_USER\SOFTWARE\Clients\StartMenuInternet\
не существует. В этом случае вы должны прочитать браузер по умолчанию с HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\
. Я подозреваю, что это также относится к новым установкам других версий Windows.
Приложение:
Метод ShellExecute
- отличное решение, если все, что вам нужно, это открыть веб-страницу в браузере по умолчанию. Однако, если вы хотите, например, установить расширение только в браузере по умолчанию, ShellExecute
не решит проблему.