Вводные слова
Куда я попал?
А что здесь есть?
DMClient
О программе
Зачем нужны форум-клиенты?
История создания или что новенького?
Благодарности
Путевые заметки программиста
Конвертация
DFM из D6 в D5
OpenBrowser
Скоро будут еще...
Шахматы
Блицтурнир 27.01.2003
Блицтурнир 11.01.2005
Мастера Дельфи -
Ruffian 1.0.1
Fritz 8 -
Мастера Дельфи
Мастера Дельфи-
Junior 8
Разное
Самолет и транспортер
Автор: Николай Адрианов
E-mail: nikkie<at>au.ru
(c)2003-2005

OpenBrowser

Часто возникает потребность программно открывать web-страницы в браузере. Естественно, хочется открывать их в браузере, установленном у пользователя по умолчанию. Стандартное решение состоит в использовании ShellExecute:

  if ShellExecute(Handle, 'open', PChar(Url), nil, nil, SW_SHOWNORMAL) <= 32 then
    RaiseLastOSError;

К сожалению, здесь мы сталкиваемся с черезмерно "умным" поведением Internet Explorer. Прямолинейное использование ShellExecute приводит к тому, что если уже есть открытые окна IE, то страница открывается не в новом окне, а в одном из уже открытых.

Предлагаемый Вашему вниманию модуль OpenBrowser действует следующим образом: проверяет значение ключа реестра HKCR\http\shell\open\command, где прописан запуск браузера по умолчанию. Internet Explorer прописывает туда строку вида

  iexplore.exe "%1" -nohome

Использование параметра -nohome и приводит к тому, что IE осуществляет навигацию на указанный URL, не открывая новое окно. В этом случае OpenBrowser запускает iexplore.exe без параметра -nohome, во всех остальных случаях используется стандартный вызов ShellExecute.

Некоторое другое решение описанной задачи опубликовано здесь: http://www.swissdelphicenter.ch/torry/showcode.php?id=490. Посмотрите, сравните. Я думаю, Вы согласитесь, что мой код проще и надежнее. Тему форума, приведшую к написанию кода OpenBrowser, можно прочитать здесь.

Скачать OpenBrowser.pas

Текущая версия - 1.02 от 19/06/2004. Я выражаю благодарность моим коллегам, способствовавшим тому, что этот модуль появился на свет и приобрел свой сегодняший вид:

  • Игорю Шевченко - за вышеприведенную ссылку на swissdelphicenter, которая и подтолкнула меня к такому решению;
  • Янису Прасолу (Gero) - за сообщение о некорректной работе с AvantBrowser;
  • анониму, выступавшему под ником Mim1 - за предложение вынести вызов ShellExecute в отдельный поток для того, чтобы программа не "замораживалась", если браузер по умолчанию - Opera (запуск самой Opera занимает существенное время, что ощущается при открытии первой страницы и весьма неприятно).

Если обнаружится некорректная работа OpenBrowser с каким-то из браузеров, сообщите мне об этом, и я внесу соответствующие исправления.

Условия распространения

Модуль OpenBrowser распространяется как open-source, Вы можете использовать его в коммерческих или некоммерческих проектах по своему усмотрению, в исходном виде или внеся в него свои изменения, можете распространять модуль как в исходном виде, так и в измененном. Единственное требование - сохранение оригинального copyright.

Если Вам понравилась настоящая статья, Вы можете разместить на нее ссылку или обратиться ко мне, чтобы я разрешил ее публикацию в Вашем издании. Несанкционирование размещение этого текста в других информационных ресурсах будет нарушением моего авторского права.

Hosted by uCoz