谁能实现不重新启动IE动态修改PROXY代理服务器?(200分)

  • 主题发起人 主题发起人 robles
  • 开始时间 开始时间
R

robles

Unregistered / Unconfirmed
GUEST, unregistred user!
前边有很多这个问题的讨论,对于修改注册表,我们都已经知道了,
现在问题的焦点在如何让当前的IE窗口知道注册表已经改变,并更新改变的代理服务器的
值,也就是刷新问题。
要求在WIN2K下实现,
本人愿意出200分!!!
声明:需要重新启动IE的不算!!!
 
哈哈,我也关心这个问题,我在2000下,真是怪
我有段程序
var
reg:Tregistry;
begin
reg:= Tregistry.Create;
try
reg.RootKey:=HKEY_CURRENT_USER;
if reg.OpenKey('/Software/Microsoft/Windows/CurrentVersion/Internet Settings',False) then
begin
reg.Writestring('ProxyServer',edit1.text);
reg.Writestring('ProxyEnable', '1');
sendmessage(0,wm_notify,0,0) ; //是不是这句有问题?
end
else
Messagebox(Handle,'写注册表文件不成功!!','错误',MB_OK+MB_ICONERROR);
finally
reg.CloseKey;
reg.free;
运行后,注册表是改了,打开ie5.5,什么也没变,而且打开一下ie5.5 (有老代理),注册表中的代理又给
又给改回去在IE中的代理了???
改代理后,你是怎么刷新的??? 哈哈,不能回答你的问题,反来问你了...
 
我用IE5。0,改了注册表以后,必须重新启动IE才能使改变的PROXY成为当前IE的PROXY。
好象没有出现你说的"改过注册表以后打开IE什么也没变"的现象啊.
 
我想是不可能实现的!!!
 
为什么不可能实现?
 
ie自己是如何实现的?
注意到,ie修改proxy后,原来打开的ie窗口的标题都变成了url,而非<title>值.
 
换一个角度:
不修改注册表,用InternetSetOption() API来修改吧。:)
 
愿闻其详。
 
procedure TForm1.Button1Click(Sender: TObject);
var
info:INTERNET_PROXY_INFO;
size:dword;
begin
// new(info);
info.dwAccessType:=INTERNET_OPEN_TYPE_PROXY;
info.lpszProxy:='abc.123.net';
info.lpszProxyBypass:='123';
InternetSetOption(nil,INTERNET_OPTION_PROXY,@info,1000);
caption:=SysErrorMessage(GetLastError);
Sendmessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,0);
// Dispose(info);
end;
标题也会改变成URL。但是不起作用。:)
 
天哪,难道这个问题真的无法解决了吗?
 
哈哈,我试验过的,下面的程序就行:
user urlmon,wininet;
procedure qiehuanproxy(const proxyname:string);
var info:TInternetProxyInfo;
lngth:integer;
h:integer;
proxy :pChar;
bypass :PChar;
begin
proxy:=pchar(proxyname);//proxy address:port
bypass:=pChar('');
info.dwAccessType := INTERNET_OPEN_TYPE_PROXY ;
info.lpszProxy :=proxy;
info.lpszProxyBypass:=bypass;
lngth:=sizeof(info);
h:=UrlMkSetSessionOption(INTERNET_OPTION_PROXY ,@info,lngth,0);
end;

 
to robles:
早知你提这个问题,我就不提了,见:http://www.delphibbs.com/delphibbs/DispQ.asp?LID=546729
希望早日能解决这个问题,到时希望能够告诉我..
 
没想到这个问题这么棘手,难道真的无法解决?可是IE又是如何做到的呢?
 
InternetSetOption(nil,INTERNET_OPTION_PROXY,@info,size);
设置完proxy后,再用
InternetSetOption(nil,INTERNET_OPTION_REFRESH, nill,0);
来通知所有程序。
 

应该是:
InternetSetOption(nil,INTERNET_OPTION_REFRESH, nill,0);
InternetSetOption(nil,INTERNET_OPTION_SETTINGS_CHANGED, nill,0);
来通知所有程序。
 
我已经彻底解决这个问题!![:)],写的测试程序已经通过,正在整理成一个函数供大家调用,
下午再来吧。肚子饿了~~~~~~~~~~
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=637348
 
后退
顶部