|
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, можно прочитать здесь. Текущая версия - 1.02 от 19/06/2004. Я выражаю благодарность моим коллегам, способствовавшим тому, что этот модуль появился на свет и приобрел свой сегодняший вид:
Если обнаружится некорректная работа OpenBrowser с каким-то из браузеров, сообщите мне об этом, и я внесу соответствующие исправления. Условия распространенияМодуль OpenBrowser распространяется как open-source, Вы можете использовать его в коммерческих или некоммерческих проектах по своему усмотрению, в исходном виде или внеся в него свои изменения, можете распространять модуль как в исходном виде, так и в измененном. Единственное требование - сохранение оригинального copyright. Если Вам понравилась настоящая статья, Вы можете разместить на нее ссылку или обратиться ко мне, чтобы я разрешил ее публикацию в Вашем издании. Несанкционирование размещение этого текста в других информационных ресурсах будет нарушением моего авторского права. |