C как открыть браузер
Перейти к содержимому

C как открыть браузер

Использование Visual C# для программного запуска браузера Интернета по умолчанию

В этой статье показано, как запустить браузер Интернета по умолчанию с помощью Visual C#.

Оригинальная версия продукта: Visual Studio
Исходный номер базы знаний: 305703

  • Эта статья относится к пространству имен платформа .NET Framework классов Майкрософт System.Diagnostics .
  • Сведения о visual C++ .NET этой статье см. в статье о программном запуске браузера Интернета по умолчанию с помощью Visual C++.

Укажите URL-адрес, FTP или файл для открытия

Можно указать URL-адрес, файл или FTP-адрес. Допустимы все три из этих назначений:

Запуск браузера с помощью метода Start класса Process

Класс Process содержит статический Start метод. Так как это статический метод, вы можете вызывать Start его без экземпляра Process класса.

Дополнительные сведения о классе см Process . в разделе "Класс обработки".

Предоставление обработки исключений

Так как при UseShellExecute Start вызове метода используется свойство по умолчанию, вам не нужно явно запрашивать реестр, чтобы определить, какой браузер используется по умолчанию. Однако при использовании этого подхода на компьютере, на котором не установлен браузер, возникает исключение. Это исключение должно быть перехвачено, чтобы можно было выполнить соответствующее действие.

В этом примере явным образом выполняется перехват ошибок, которые создаются, когда необходимый раздел реестра не найден, и указывает, что браузер не установлен. Кроме того, для других ошибок, которые могут возникнуть, предоставляется общий обработчик исключений. Блок try. catch демонстрируется в списке полного кода.

Полный пример кода

Устранение неполадок

Этот код сильно зависит от сопоставлений типов файлов приложения в кусте HKEY_CLASSES_ROOT (HKCR) реестра. Это может привести к непредвиденным результатам и исключениям, если реестр поврежден. Кроме того, типы файлов и расширения могут быть связаны с приложениями, отличными от браузера. Например, HTM-файлы или HTML-файлы могут быть связаны с программным обеспечением веб-разработки, а не браузером.

Как подключить сторонний браузер в приложении на C#

image

В определенный момент мне стало некомфортно использовать стандартный контрол WebBrowser, предлагаемый Visual Studio.
Причин было несколько:
1. Использовался IE-движок, что само по себе уже сильный аргумент.
2. Кривая работа с JS.
3. Отсутствие масштабирования.
4. Если запустить на машине, где стоит IE6, то все его «достоинства» переносятся на приложение.

В итоге был начат поиск альтернативных решений.
Было рассмотрено 2 SDK. xulrunner(Mozilla) и Awesomium(Chrome)

Подключение обоих происходит примерно одинаково, но на всякий случай опишу оба.

image

1. xulrunner
шаг 1
Идем на офицальный сайт http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/
Выбираем подходящую нам версию.
Тут хотелось бы сделать маленькое отступление. Чем позднее версия, тем она тяжелее: к примеру, 1.9v весит 21Мб., а уже 19v весит 32Мб. Помимо этого каждая следующая версия требует все больше ресурсов. Забегая вперед скажу, что это и стало основной причиной отказа от этой SDK.

По данной ссылке заходим в папку с выбранной версией, далее sdk/xulrunner-X.X.en-US.win32.sdk.zip

шаг 2
Скачиваем и распаковываем содержимое. Нас интересует из архива только папочка bin. Копируем ее в папку с приложением и переименовываем в xulrunner. Имя можно и другое, но чтобы не было различий с моим описанием, лучше имя сделать такое.

шаг 3
Для работы с этой SDK нам потребуется библиотека Skybound.GeckoFX.bin.v1.9.1.0 Ее можно скачать тут http://code.google.com/p/geckofx/
Данная библиотека работает xulrunner версии 1.9.
Если вы решили использовать более позднюю версию, то нужно искать Skybound.GeckoFX 2.0, она подходит для версий 2.0 и выше.

шаг 4
В нашем приложении добавляем в References Skybound.Gecko.dll из скачанного архива

шаг 5
Правим класс Program:

Инициализируем контрол браузера:

По данному коду родительской панелью будет panel1

шаг 6
Чтобы выполнить программно какой-либо JavaScript пришлось идти на ухищрения, т.к. то ли функции, которые для этого по идее предназначены не дописаны в этой версии, то ли что-то еще. Но выход я нашел только такой:

Минусом является то, что нельзя получить результат обработки, только в виде alert();
Данная проблема также стала причиной того, что я начал искать замену и пришел к Awesomium

image

2. Awesomium
шаг 1
Скачиваем SDK по ссылке http://awesomium.com/
На сайте имеется две версии — стабильная(1.6.5) и тестовая(1.7). Тестовая в целом работает лучше.
Для работы нам понадобятся файлы
Awesomium.Core.dll
Awesomium.dll
Awesomium.Windows.Controls.Design.dll
Awesomium.Windows.Controls.dll
Awesomium.Windows.Forms.dll

шаг 2
Подключаем к проекту библиотеки
Awesomium.Core.dll
Awesomium.Windows.Forms.dll

шаг 3
В Toolbox кликаем правой кнопкой и выбираем Choose Items. Далее жмем browse и подключаем Awesomium.Windows.Forms.dll, после этого у нас появится новые контролы WebControl, AddressBox и т.д. Нам в первую очередь важен WebControl

шаг 4
Размещаем контрол в дизайне

шаг 5
Примеры использования различных функций.

500 — это таймаут.

Вызов JS функции

al — это имя функции
второй параметр передает значения в фунцию. В данном случае он пустой.

Приведенные примеры работают на Awesomium 1.6.5, в версии 1.7 немного изменена архитектура и некоторые методы могут отсутствовать или вызываться по другому.

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

Открыть стандартный браузер с конкретной web-страницей

Как через С# открыть бразуер с конкретным адресом? Ну или новую вкладку в браузере.

Соответственно, если нужны юругие браузеры, расширяем условия фильтрации.

Код не тестил, но суть такая.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками c# браузер или задайте свой вопрос.

Site design / logo © 2022 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2022.6.13.42356

Нажимая «Принять все файлы cookie», вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *