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

вот что сам нашел, но это дельфистов:
Свои настройки 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
30.10.2007, 15:05
    #34904894
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebBrowser + 2 Proxy ?
Что мешает самому воспользоваться ф-ей UrlMkSetSessionOption и посмотреть результат?
...
Рейтинг: 0 / 0
30.10.2007, 15:31
    #34904980
konstsu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebBrowser + 2 Proxy ?
AntonariyЧто мешает самому воспользоваться ф-ей UrlMkSetSessionOption и посмотреть результат?
Вопрос как ее декларировать?
...
Рейтинг: 0 / 0
30.10.2007, 15:37
    #34905005
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebBrowser + 2 Proxy ?
Ответ
Код: 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
30.10.2007, 16:07
    #34905122
konstsu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebBrowser + 2 Proxy ?
Хоршо по тихоньку продвигаемся, осталось узнать как работать с функциями: SizeOf, Dispose
что за переменные: INTERNET_OPEN_TYPE_PROXY; Internet_Proxy_Info, INTERNET_OPTION_PROXY
что за объект: PInternetProxyInfo и как его декларировать?
:D
...
Рейтинг: 0 / 0
30.10.2007, 16:33
    #34905229
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebBrowser + 2 Proxy ?
Шаблон поиска деклараций в яндексе: declare <имя функции, типа или констанаты>.
Все просто, если подумать.

PInternetProxyInfo это тип, а не объект, SizeOf это Len, Dispose тебе не нужно.
...
Рейтинг: 0 / 0
30.10.2007, 16:37
    #34905241
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebBrowser + 2 Proxy ?
Вернее тип это Internet_Proxy_Info, PInternetProxyInfo это указатель, тебе он не нужен.
INTERNET_OPEN_TYPE_PROXY и INTERNET_OPTION_PROXY - константы.
...
Рейтинг: 0 / 0
30.10.2007, 16:41
    #34905260
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebBrowser + 2 Proxy ?
Короче на 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
30.10.2007, 17:39
    #34905497
konstsu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebBrowser + 2 Proxy ?
Вот до чего дошел:
Модуль:
Код: 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
30.10.2007, 21:50
    #34905949
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebBrowser + 2 Proxy ?
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
31.10.2007, 09:46
    #34906413
konstsu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebBrowser + 2 Proxy ?
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
31.10.2007, 14:53
    #34907826
lena_###
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebBrowser + 2 Proxy ?
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
31.10.2007, 16:03
    #34908102
konstsu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebBrowser + 2 Proxy ?
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
31.10.2007, 16:07
    #34908120
konstsu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebBrowser + 2 Proxy ?
Вообще учитывая все выше сказанное получаем (Если кому интересно):
Модуль:
Код: 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
14.04.2008, 17:34
    #35254231
Mace-ftl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebBrowser + 2 Proxy ?
Сэнкель за итоги )
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / WebBrowser + 2 Proxy ? / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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