powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / WebBrowser + 2 Proxy ?
16 сообщений из 16, страница 1 из 1
WebBrowser + 2 Proxy ?
    #34897751
konstsu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос в следующем.
Есть 2 проски сервера, хочеться сделать WebBrowser пользующийся 2 proxy в зависимости тот который с данный момент включен.
Есть ли у контрола WebBrowser свойство, которому можно задавать проксю?
Но желательно минуя реестр.
...
Рейтинг: 0 / 0
WebBrowser + 2 Proxy ?
    #34904174
konstsu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что никто не сталкивался с такой проблемой?

вот что сам нашел, но это дельфистов:
Свои настройки Proxy в программе с TWebBrowser
--------------------------------------------------------------------------------


Автор: Павел

Сразу скажу, что эта статья - маленькая рекомендация тем, кто хочет реализовать возможность работы TWebBrowser в своей программе с настройками Proxy , которые отличаются от стандартных.

В один прекрасный день мне понадобилось в программе периодически менять Proxy и при этом пользоваться всем, что предоставляет IE. Лучший и единственный выбор - TwebBrowser. При близком знакомстве с ним стало понятно, что через Proxy он работать не может (вернее может, но берет настройки из "Свойств обозревателя"). Перспектива постоянно менять настройки реестра меня не прельщала. И как назло ни в одной крупной конференции не было даже упоминания о возможности настройки Proxy в ходе выполнения программы кроме изменения реестра (может плохо искал). Перерыв Fido-архивы и конференции Инета накаткнулся на win-функцию UrlMkSetSessionOption. Вот к чему привели мои изыскания :

....
uses...urlmon, wininet...
....
var
PIInfo: PInternetProxyInfo;
begin
New(PIInfo);
PIInfo^.dwAccessType := INTERNET_OPEN_TYPE_PROXY;
// Изменение настроек ПРОКСИ
PIInfo^.lpszProxy := PChar('some.proxy:someport');
// указать прокси напр.
195.43.67.33: 8080
PIInfo^.lpszProxyBypass := PChar('');
// Список адресов, доступ к которым возможен минуя Proxy сервер

UrlMkSetSessionOption(INTERNET_OPTION_PROXY, piinfo,
SizeOf(Internet_Proxy_Info), 0);
....
Dispose(PIInfo);
....
Вызывать функцию UrlMkSetSessionOption можно из любого места программы, причем любое количество раз и с разными настройками.

После вызова функции TWebBrowser будет работать через указанный прокси. Еще раз повторюсь настройки касаются только текущей сессии (программы на момент выполнения ), общие настройки Windows не изменяются.
...
Рейтинг: 0 / 0
WebBrowser + 2 Proxy ?
    #34904894
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что мешает самому воспользоваться ф-ей UrlMkSetSessionOption и посмотреть результат?
...
Рейтинг: 0 / 0
WebBrowser + 2 Proxy ?
    #34904980
konstsu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AntonariyЧто мешает самому воспользоваться ф-ей UrlMkSetSessionOption и посмотреть результат?
Вопрос как ее декларировать?
...
Рейтинг: 0 / 0
WebBrowser + 2 Proxy ?
    #34905005
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ответ
Код: plaintext
1.
2.
3.
4.
Private Declare Function UrlMkSetSessionOption Lib "urlmon.dll" _
(ByVal dwoption As Long, ByVal pBuffer As Any, _
ByVal dwbufferlength As Long, _
ByVal dwReserved As Long)
...
Рейтинг: 0 / 0
WebBrowser + 2 Proxy ?
    #34905122
konstsu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хоршо по тихоньку продвигаемся, осталось узнать как работать с функциями: SizeOf, Dispose
что за переменные: INTERNET_OPEN_TYPE_PROXY; Internet_Proxy_Info, INTERNET_OPTION_PROXY
что за объект: PInternetProxyInfo и как его декларировать?
:D
...
Рейтинг: 0 / 0
WebBrowser + 2 Proxy ?
    #34905229
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шаблон поиска деклараций в яндексе: declare <имя функции, типа или констанаты>.
Все просто, если подумать.

PInternetProxyInfo это тип, а не объект, SizeOf это Len, Dispose тебе не нужно.
...
Рейтинг: 0 / 0
WebBrowser + 2 Proxy ?
    #34905241
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вернее тип это Internet_Proxy_Info, PInternetProxyInfo это указатель, тебе он не нужен.
INTERNET_OPEN_TYPE_PROXY и INTERNET_OPTION_PROXY - константы.
...
Рейтинг: 0 / 0
WebBrowser + 2 Proxy ?
    #34905260
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче на vb это выглядит так:
Код: plaintext
1.
2.
3.
4.
Dim ipi as Internet_Proxy_Info
ipi.dwAccessType = INTERNET_OPEN_TYPE_PROXY
ipi.lpszProxy = "some.proxy:someport"
ipi.lpszProxyBypass = "password"
UrlMkSetSessionOption INTERNET_OPTION_PROXY, piinfo, Len(ipi),  0 
Декларации ищи сам согласно шаблону :)
...
Рейтинг: 0 / 0
WebBrowser + 2 Proxy ?
    #34905497
konstsu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот до чего дошел:
Модуль:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Public Declare Function UrlMkSetSessionOption Lib "urlmon.dll" _
(ByVal dwoption As Long, ByVal pBuffer As Any, _
ByVal dwbufferlength As Long, _
ByVal dwReserved As Long)
Public Type INTERNET_PROXY_INFO
dwAccessType As Long
lpszProxy As String
lpszProxyBypass As String
End Type
Public Const INTERNET_OPEN_TYPE_PROXY =  3 
Public Const INTERNET_OPTION_PROXY =  38 
Код формы
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Private Sub Command1_Click()
Dim ipi As INTERNET_PROXY_INFO
ipi.dwAccessType = INTERNET_OPEN_TYPE_PROXY
ipi.lpszProxy = "some.proxy:someport"
ipi.lpszProxyBypass = "password"
UrlMkSetSessionOption INTERNET_OPTION_PROXY, ipi, Len(ipi),  0 
End Sub
Ошибка в строке:
UrlMkSetSessionOption INTERNET_OPTION_PROXY, ipi , Len(ipi), 0
несоответствие типов
???
...
Рейтинг: 0 / 0
WebBrowser + 2 Proxy ?
    #34905949
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
konstsuВот до чего дошел:
Модуль:
Код: plaintext
1.
2.
3.
4.
Public Declare Function UrlMkSetSessionOption Lib "urlmon.dll" _
(ByVal dwoption As Long, ByVal pBuffer As Any, _
ByVal dwbufferlength As Long, _
ByVal dwReserved As Long)
Ошибка в строке:
UrlMkSetSessionOption INTERNET_OPTION_PROXY, ipi , Len(ipi), 0
несоответствие типов
???
Может ByRef pBuffer As Any?
...
Рейтинг: 0 / 0
WebBrowser + 2 Proxy ?
    #34906413
konstsu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Serge Gavrilov konstsuВот до чего дошел:
Модуль:
Код: plaintext
1.
2.
3.
4.
Public Declare Function UrlMkSetSessionOption Lib "urlmon.dll" _
(ByVal dwoption As Long, ByVal pBuffer As Any, _
ByVal dwbufferlength As Long, _
ByVal dwReserved As Long)
Ошибка в строке:
UrlMkSetSessionOption INTERNET_OPTION_PROXY, ipi , Len(ipi), 0
несоответствие типов
???
Может ByRef pBuffer As Any?
Спасибо, от одной ошибки избавился, появилась другая.
Таж строка: ошибка 49 "Bad DLL calling convention"
...
Рейтинг: 0 / 0
WebBrowser + 2 Proxy ?
    #34907826
lena_###
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
konstsu

Дело в том, что UrlMkSetSessionOption – это не Function а Sub (обратите внимание на то, что Вы декларируете ее как функцию, но не указываете тип возвращаемого значения). В общем декларация такая:
Код: plaintext
1.
2.
 Private Declare Sub UrlMkSetSessionOption Lib " urlmon.dll" _
(ByVal dwOption As Long, ByRef pBuffer As Any, _
ByVal dwBufferLength As Long, ByVal dwReserved As Long)

А вообще воспользуйтесь ApiViewer – там найдете декларации подавляющего большинства Api-функций и значения констант. А если поставите себе Api-Guide, то там найдете примеры использования многих Api-функций.
...
Рейтинг: 0 / 0
WebBrowser + 2 Proxy ?
    #34908102
konstsu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lena_### konstsu

Дело в том, что UrlMkSetSessionOption – это не Function а Sub (обратите внимание на то, что Вы декларируете ее как функцию, но не указываете тип возвращаемого значения). В общем декларация такая:
Код: plaintext
1.
2.
 Private Declare Sub UrlMkSetSessionOption Lib " urlmon.dll" _
(ByVal dwOption As Long, ByRef pBuffer As Any, _
ByVal dwBufferLength As Long, ByVal dwReserved As Long)

А вообще воспользуйтесь ApiViewer – там найдете декларации подавляющего большинства Api-функций и значения констант. А если поставите себе Api-Guide, то там найдете примеры использования многих Api-функций.
Спасибо :)
...
Рейтинг: 0 / 0
WebBrowser + 2 Proxy ?
    #34908120
konstsu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще учитывая все выше сказанное получаем (Если кому интересно):
Модуль:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 Public Declare Sub UrlMkSetSessionOption Lib "urlmon.dll" _
(ByVal dwOption As Long, ByRef pBuffer As Any, _
ByVal dwBufferLength As Long, ByVal dwReserved As Long)

Public Type INTERNET_PROXY_INFO
dwAccessType As Long
lpszProxy As String
lpszProxyBypass As String
End Type
Public Const INTERNET_OPEN_TYPE_PROXY =  3 
Public Const INTERNET_OPTION_PROXY =  38 

Форма:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Private Sub Command1_Click()
Dim ipi As INTERNET_PROXY_INFO
ipi.dwAccessType = INTERNET_OPEN_TYPE_PROXY
ipi.lpszProxy = "proxy1:port1"
ipi.lpszProxyBypass = ""
Call UrlMkSetSessionOption(INTERNET_OPTION_PROXY, ipi, Len(ipi),  0 )
WB.Navigate2 "URL1"
End Sub

Private Sub Command2_Click()
Dim ipi As INTERNET_PROXY_INFO
ipi.dwAccessType = INTERNET_OPEN_TYPE_PROXY
ipi.lpszProxy = "proxy2:port2"
ipi.lpszProxyBypass = ""
Call UrlMkSetSessionOption(INTERNET_OPTION_PROXY, ipi, Len(ipi),  0 )
WB.Navigate2 "URL2"
End Sub
...
Рейтинг: 0 / 0
WebBrowser + 2 Proxy ?
    #35254231
Mace-ftl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сэнкель за итоги )
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / WebBrowser + 2 Proxy ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]