修改了IE代理,如何让IE立即生效?

时间:2021-06-24 16:57:03

RegSetValueEx hKey, "ProxyServer", 0, REG_SZ, ByVal str, LenB(StrConv(str, vbFromUnicode)) + 1
成功修改了注册表,可是必须重开一个新的IE窗口,才会去注册表中读取新的代理设置

如何才能不新开IE,就让设置的代理生效呢?

或者不用上面的语句,用其它方法,最好给全代码。

8 个解决方案

#1


看看就知道了,不是VB的代码,Delphi 的:


更改IE代理服务器设置,不重新启动IE,代码如下:
但如何设置某种协议为一特定地址呢,BYPASS参数怎么用?
其实在proxyserver中http=205.207.118.51:80;https=205.207.118.51:80;gopher=205.207.118.51:80;socks=205.207.118.51:80是分别设置,
如果只有地址和端口则是所有协议使用相同地址
///Coder:Kingron
function ChangeProxy(const Proxy, Port,ByPass: string; const bEnabled: boolean = True): boolean;
var
reg: TreGIStry;
info: INTERNET_PROXY_INFO;
Fproxy:string;
begin
Result := False;
FProxy:=Format('%s:%s',[Proxy,Port]);
reg := TreGIStry.Create;
try
reg.RootKey := HKEY_CURRENT_USER;
if reg.OpenKey('\Software\Microsoft\windows\CurrentVersion\Internet Settings', True) then
begin
reg.Writestring('ProxyServer', Fproxy);
reg.WriteInteger('ProxyEnable', integer(bEnabled));
info.dwaccessType := INTERNET_OPEN_TYPE_PROXY;
info.lpszProxy := pchar(proxy);
info.lpszProxyBypass := pchar(ByPass);
InternetSetOption(nil, INTERNET_OPTION_PROXY, @info, SizeOf(Info));
InternetSetOption(nil, INTERNET_OPTION_SETTINGS_CHANGED, nil, 0);
// InternetSetOption(nil, INTERNET_OPTION_REFRESH, nil, 0);
// Sendmessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0);
Result:=True;
end
finally
reg.CloseKey;
reg.free;
end;
end;

#2


当然是VB的代码,你看错了,下面的代码你看,就是VB的,唉:

Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long                                                                   '   Note   that   if   you   declare   the   lpData   parameter   as   String,   you   must   pass   it   By   Value.

  str = Trim(address) & ":" & Trim(Port)
  SubKey = "Software\Microsoft\Windows\CurrentVersion\Internet Settings\"
  RegCreateKey HKEY_CURRENT_USER, SubKey, hKey
  RegSetValueEx hKey, "ProxyServer", 0, REG_SZ, ByVal str, LenB(StrConv(str, vbFromUnicode)) + 1

#3


lz,你根本没有看一眼。


中间提到一个API:InternetSetOption,你照做就是了。

#4


不错,测试一下那个API

#5


呵呵,正要用这个呢,收到~!

#6


已经看到了,不过
info.lpszProxy := pchar(proxy);
info.lpszProxyBypass := pchar(ByPass);
这两句转成VB的应该怎么写呢?
proxy应该就是代理的IP吧

#7


上面的问题已经可以了,现在想读取已设置了的代理的值,使用下面三句代码,报错,大意是内存不能READ,这是网上很流行的一段代码啊,怎么会出错呢?

  ReDim arrBuffer(0 To 4095)
  InternetQueryOption 0&, INTERNET_OPTION_PROXY, arrBuffer(0), UBound(arrBuffer) - LBound(arrBuffer) + 1
  CopyMemory ProxyInfo, arrBuffer(0), ByVal LenB(ProxyInfo)

#8


自己顶一下

#1


看看就知道了,不是VB的代码,Delphi 的:


更改IE代理服务器设置,不重新启动IE,代码如下:
但如何设置某种协议为一特定地址呢,BYPASS参数怎么用?
其实在proxyserver中http=205.207.118.51:80;https=205.207.118.51:80;gopher=205.207.118.51:80;socks=205.207.118.51:80是分别设置,
如果只有地址和端口则是所有协议使用相同地址
///Coder:Kingron
function ChangeProxy(const Proxy, Port,ByPass: string; const bEnabled: boolean = True): boolean;
var
reg: TreGIStry;
info: INTERNET_PROXY_INFO;
Fproxy:string;
begin
Result := False;
FProxy:=Format('%s:%s',[Proxy,Port]);
reg := TreGIStry.Create;
try
reg.RootKey := HKEY_CURRENT_USER;
if reg.OpenKey('\Software\Microsoft\windows\CurrentVersion\Internet Settings', True) then
begin
reg.Writestring('ProxyServer', Fproxy);
reg.WriteInteger('ProxyEnable', integer(bEnabled));
info.dwaccessType := INTERNET_OPEN_TYPE_PROXY;
info.lpszProxy := pchar(proxy);
info.lpszProxyBypass := pchar(ByPass);
InternetSetOption(nil, INTERNET_OPTION_PROXY, @info, SizeOf(Info));
InternetSetOption(nil, INTERNET_OPTION_SETTINGS_CHANGED, nil, 0);
// InternetSetOption(nil, INTERNET_OPTION_REFRESH, nil, 0);
// Sendmessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0);
Result:=True;
end
finally
reg.CloseKey;
reg.free;
end;
end;

#2


当然是VB的代码,你看错了,下面的代码你看,就是VB的,唉:

Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long                                                                   '   Note   that   if   you   declare   the   lpData   parameter   as   String,   you   must   pass   it   By   Value.

  str = Trim(address) & ":" & Trim(Port)
  SubKey = "Software\Microsoft\Windows\CurrentVersion\Internet Settings\"
  RegCreateKey HKEY_CURRENT_USER, SubKey, hKey
  RegSetValueEx hKey, "ProxyServer", 0, REG_SZ, ByVal str, LenB(StrConv(str, vbFromUnicode)) + 1

#3


lz,你根本没有看一眼。


中间提到一个API:InternetSetOption,你照做就是了。

#4


不错,测试一下那个API

#5


呵呵,正要用这个呢,收到~!

#6


已经看到了,不过
info.lpszProxy := pchar(proxy);
info.lpszProxyBypass := pchar(ByPass);
这两句转成VB的应该怎么写呢?
proxy应该就是代理的IP吧

#7


上面的问题已经可以了,现在想读取已设置了的代理的值,使用下面三句代码,报错,大意是内存不能READ,这是网上很流行的一段代码啊,怎么会出错呢?

  ReDim arrBuffer(0 To 4095)
  InternetQueryOption 0&, INTERNET_OPTION_PROXY, arrBuffer(0), UBound(arrBuffer) - LBound(arrBuffer) + 1
  CopyMemory ProxyInfo, arrBuffer(0), ByVal LenB(ProxyInfo)

#8


自己顶一下