Форум: "Сети";
Текущий архив: 2003.05.26;
Скачать: [xml.tar.bz2];
ВнизWebBrowser Найти похожие ветки
← →
Vitas2 (2003-03-24 15:45) [0]как у компонента WebBrowser1 поменять настройки тикие как адресс прокси и порт прокси не изменяя настроек в Internet Explorer(или другово имеется в виду оосновного) или это невозможно?
← →
Дмитрий К.К. (2003-03-24 15:52) [1]ИМХО, такое просто невозможно осуществить.
← →
Smithson (2003-03-24 18:09) [2]Я тоже долго так думал, однако возможно.
Есть такая функция UrlMkSetSessionOption, так вот она позволяет
сменить прокси (и кое-что еще) для текущего сеанса. используется примерно так:
var PIInfo : PInternetProxyInfo;
...
New (PIInfo) ;
PIInfo^.dwAccessType := INTERNET_OPEN_TYPE_PROXY ; // Изменение настроек ПРОКСИ
PIInfo^.lpszProxy := PChar(AProxy); // указать прокси напр. 195.43.67.33:8080
PIInfo^.lpszProxyBypass := PChar(""); // Список адресов, доступ к которым возможен минуя Proxy сервер
UrlMkSetSessionOption(INTERNET_OPTION_PROXY, piinfo, SizeOf(Internet_Proxy_Info), 0);
← →
nikkie (2003-03-24 19:47) [3]ИМХО, вариант с использованием UrlMkSetSessionOption основан на недокументированных особенностях реализации IE. Если предположить, что IE 7 не будет использовать WinInet или будет периодически перечитывать настройки прокси, то этот способ перестанет работать.
С другой стороны, есть документированный способ - с использованием IDocHostUIHandler::GetOptionKeyPath метода. Для этого можно воспользоваться компонентой TEmbeddedWB. Правда этот подход затрагивает не только прокси, но и другие настройки браузера. Можно считать это плюсом, а можно и минусом :))
http://www.euromind.com/iedelphi/embeddedwb/ongetoptionskeypath.htm
← →
Vitas2 (2003-03-25 05:10) [4]GetOptionKeyPath - это что фукция?
function TForm1.EmbeddedWB1GetOptionKeyPath(var pchKey:
PWideChar;
const dw: Cardinal): HRESULT;
Откуда она там берется? Oни сами ее там описывают?
Или смысл в том что просто создается раздел в реестре?
А если у пользвателя нет прав на изменение реестра?
← →
nikkie (2003-03-25 13:30) [5]Если ты используешь указанную компоненту, то у нее есть событие OnGetOptionKeyPath. В обработчике этого события можно прописать ключ реестра, откуда IE должен читать настройки. Туда же он будет их и сохранять.
>А если у пользвателя нет прав на изменение реестра?
Значит, в реестр должен писать тот, кто имеет права. Например, администратор, инсталлировавший программу. Не спорю, не очень гибко, но претензии не ко мне, а к MS.
← →
Ihor Osov'yak (2003-03-25 14:00) [6]
unit e0_Proxy;
interface
procedure SaveBeginInetSetting;
function RestoreBeginInetSetting:boolean;
function InetSessionToUserSetting(aEnProxy:boolean; aStrIP,aStrPort:string):boolean;
function InetSessionToRegistrySetting:boolean;
implementation
uses windows,WinInet,UrlMon,
SysUtils;
var spBeginProxyStruct:PInternetProxyInfo;
len_spBeginProxyStruct:DWORD;
procedure SaveBeginInetSetting;
begin
InternetQueryOption(nil,INTERNET_OPTION_PROXY,nil,len_spBeginProxyStruct);
spBeginProxyStruct:=AllocMem(len_spBeginProxyStruct);
InternetQueryOption(nil,INTERNET_OPTION_PROXY,spBeginProxyStruct,len_spBeginProxyStruct);
end;
function RestoreBeginInetSetting:boolean;
var
dreserved:dword;
x:dword;
p : INTERNET_PROXY_INFO;
begin
result := false;
p.dwAccessType := spBeginProxyStruct^.dwAccessType;
p.lpszProxyBypass := spBeginProxyStruct^.lpszProxyBypass;
p.lpszProxy := spBeginProxyStruct^.lpszProxy;
x := sizeof(p);
dreserved := 0;
if UrlMkSetSessionOption({INTERNET_OPTION_REFRESH}
INTERNET_OPTION_PROXY,@p,x,dreserved)<>S_Ok
then begin
Exit;
end;
result := true;
end;
function InetSessionToUserSetting(aEnProxy:boolean; aStrIP,aStrPort:string):boolean;
var
p : INTERNET_PROXY_INFO;
x : integer;
dreserved : dword;
begin
result := false;
FillChar(p,sizeof(p),0);
if aEnProxy then begin
p.dwAccessType := INTERNET_OPEN_TYPE_PROXY;
p.lpszProxy := PChar(aStrIP+":"+aStrPort);
end
else begin
p.dwAccessType := INTERNET_OPEN_TYPE_DIRECT;
p.lpszProxy := "";
end;
p.lpszProxyBypass := "";
x := sizeof(p);
dreserved := 0;
if UrlMkSetSessionOption(INTERNET_OPTION_PROXY,@p,x,dreserved)<>S_OK
then begin
Exit;
end;
result := true;
end;
function InetSessionToRegistrySetting:boolean;
var
hk : HKEY;
s : string;
BufSize : integer;
posStr : integer;
retType : DWORD;
isUsingProxy : DWORD;
begin
result := false;
s := "";
if RegOpenKeyEx(HKEY_CURRENT_USER,
"SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings",
0,
KEY_ALL_ACCESS,
hk) = ERROR_SUCCESS then
begin
BufSize := SizeOf(isUsingProxy);
isUsingProxy := 0;
retType := REG_DWORD;
RegQueryValueEx(hk,
"ProxyEnable",
nil,
@retType,
@isUsingProxy,
@bufSize);
if isUsingProxy > 0 then
begin
SetLength(s, MAX_PATH);
BufSize := length(s);
FillChar(s[1], MAX_PATH, #0);
retType := REG_NONE;
RegQueryValueEx(hk,
"ProxyServer",
nil,
@retType,
@s[1],
@bufSize);
SetLength(s, bufsize);
if bufsize > 0 then
if s[length(s)] = #0 then SetLength(s, length(s)-1);
if length(s) > 0 then
begin
posStr := Pos("http=", LowerCase(s));
if posStr > 0 then
s := Copy(s, posStr+5, length(s));
posStr := Pos(";", s);
if posStr > 0 then
s := Copy(s, 1, posStr-1);
result := InetSessionToUserSetting(true,s,"");
end;
end
else result := InetSessionToUserSetting(false,"","");
RegCloseKey(hk);
end;
end;
end.
← →
Ihor Osov'yak (2003-03-25 14:12) [7]Да, изменения действуют на следующую навигацию для всех броузеров в пределах текущего процесса.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2003.05.26;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c