如何编程动态改变IE的代理服务器设置, 并且使之马上生效!

原创 2003年11月27日 00:31:00

最近有很多朋友都在讨论如何改变IE的代理服务器设置,   刚好我最近做的一个东西里面用到了这样的功能. 拿出来和大家共享一下.

用到的关键函数是wininet库里面的InternetSetOption. msdn里面有对它详细的介绍, 可以自己去看看. 当把参数dwOption设置为INTERNET_OPTION_SETTINGS_CHANGED的时候. 他就会促使IE在下一次打开网页的时候重新到注册表里面去取代理的设置信息.  所以我们就可以先将注册表里面的代理信息更改掉, 然后调用InternetSetOption函数, 从而达到使自己想要的代理设置马上生效的目的.

下面的函数可以实现改变IE的http代理服务器设置的目的. 里面加了少许的注释以帮助大家理解.

BOOL SetHttpProxy(CString ip, UINT port)
{
 
 CString l_just;
 l_just.Format("http=%s:%d", ip.LockBuffer(), port);


 //下面的代码将注册表项HKEY_CURRENT_USER//Software//Microsoft//Windows//CurrentVersion//Internet Settings//ProxyServer
 //的内容取出来
 HKEY hKeyIn = HKEY_CURRENT_USER, hKeyOut;
 if( ERROR_SUCCESS != RegOpenKeyEx(hKeyIn, "Software//Microsoft//Windows//CurrentVersion//Internet Settings", 0, KEY_CREATE_LINK | KEY_WRITE | KEY_READ | KEY_NOTIFY, &hKeyOut))
 {
  return FALSE;
 }


 ULONG regsize = 0;
 if(ERROR_SUCCESS != RegQueryValueEx(hKeyOut, "ProxyServer", NULL, NULL, NULL, &regsize))
 {
  return FALSE;
 }
 
 LPBYTE pValue = new BYTE[regsize];
 memset(pValue, 0x00, regsize);

 if(ERROR_SUCCESS != RegQueryValueEx(hKeyOut, "ProxyServer", NULL, NULL, pValue, &regsize))
 {
  return FALSE;
 }

 CString oldproxy((char *)pValue);
 delete [] pValue;
 pValue = NULL;

 //从注册表中读出来的数据格式为:http=111.111.111.111:80;ftp=222.222.222.222:21;......,
 //如果你只想改变http的代理的话, 就只要把其中的111.111.111.111:80换成你想要的代理就行了,
 //类似的你可以改变其他的代理.

 //下面的代码就替换http代理成为参数所指定的代理.
 int pos = 0;
 //如果没有字符串中没有找到"http="说明用户没有设置http代理,这时候直接加在最前面.
 if(-1 == (pos = oldproxy.Find("http=")))
 {
  pos = 0;
 }

 int pos1 = 0;
 if(-1 == (pos1 = oldproxy.Find(";", pos)))
 {
  pos1 = oldproxy.GetLength();
 }

 oldproxy.Delete(pos, pos1 - pos);
 oldproxy.Insert(pos, l_just);

 if(ERROR_SUCCESS != RegSetValueEx(hKeyOut, "ProxyServer", 0, REG_SZ, (const unsigned char *)oldproxy.LockBuffer(), oldproxy.GetLength() + 1))
 {
  return FALSE;
 }

 RegCloseKey(hKeyOut);


 //使设置生效
 if(!InternetSetOption(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, 0))
 {
  return FALSE;
 }


 return TRUE;
}

 

最后在使用此函数的时候不要忘记包含头文件 #include <wininet.h> 和lib: wininet.lib

如果代码有什么问题,欢迎大家指正. 作者的msn : sxxny@hotmail.com

                                                                                     srj   2003-11-26

如何编程动态改变IE的代理服务器设置, 并且使之马上生效

INTERNET_OPTION_PER_CONNECTION_OPTION来Invoke InternetQueryOption,详细内容可以参考MS Q226473如何编程动态改变IE的代理服务器设...
  • szramon
  • szramon
  • 2010年04月26日 22:01
  • 684

如何编程动态改变IE的代理服务器设置, 并且使之马上生效! - VC

如何编程动态改变IE的代理服务器设置, 并且使之马上生效! - VC如何编程动态改变IE的代理服务器设置, 并且使之马上生效! 发表时间:2004-4-13 关键字:不详 最近有很多朋友都在讨论如何...
  • owsxo
  • owsxo
  • 2007年05月08日 10:55
  • 1074

如何编程动态改变IE的代理服务器设置, 并且使之马上生效!

 如何编程动态改变IE的代理服务器设置, 并且使之马上生效!     选择自 sxxny 的 Blog 关键字  IE 代理服务器出处  最近有很多朋友都在讨论如何改变IE的代理服务器设置,   刚好...
  • skyremember
  • skyremember
  • 2008年09月28日 11:48
  • 639

改变IE的代理服务器设置, 并且使之马上生效——编程实例

用到wininet库里面的InternetSetOption函数. MSDN里面有对它详细的介绍,可以自己去看看.当把参数dwOption设置为INTERNET_OPTION_SETTINGS_CHA...
  • bytxl
  • bytxl
  • 2013年11月09日 16:44
  • 806

如何设置IE禁用代理服务器

今天很是烦恼,因为往常电脑开机之后都不用我自己去配置,他就主动的连好网等着我去用了,表现的一直挺好的,可是自从今天下午开完会,我回到机房以后,就再也连不上了,不管是关机,重启怎么都不行,一直显示“禁用...
  • tigaobansongjiahuan8
  • tigaobansongjiahuan8
  • 2017年08月05日 17:43
  • 670

IE代理服务器设置被禁用问题

  有时管理员为了限制上网,将IE代理服务器设置禁用了,我们只要通过组策略将其启用即可。  单击“开始->运行”,输入“gpedit.msc”打开组策略:  对于IE5.0/6.0 ,依次展开“用户配...
  • lixianlin
  • lixianlin
  • 2007年04月11日 13:05
  • 5798

不重启IE修改代理服务器的设置

IE通过Internet选项进行代理服务器的设置相信大家很熟悉,但是有的情况下,需要有一堆代理IP进行切换,这样就显得很不方便。那我们就弄小工具实现下切换先介绍下注册表下的两个键    HKEY_CU...
  • longzhiwen888
  • longzhiwen888
  • 2015年06月19日 15:47
  • 565

IE 代理服务器设置程序实现

IE 代...
  • 791005
  • 791005
  • 2006年10月26日 08:35
  • 1575

IE 代理服务器设置程序实现

 本文其实.没有什么价值.写出来也是处于好玩.因为.最近闲的要命.所以总喜欢去些BBS聊天室之类的地方打发时间可是.突然发现这些地方总是喜欢记录IP真是麻烦.别人一跟踪马上就查出你的位置.实在是不爽....
  • yarshray
  • yarshray
  • 2003年08月02日 18:42
  • 2239

IE代理服务器设置

设备管理系统服务器迁移,给原来的首页设置了自动跳转服务器迁移通知页面,由于公司内部使用局域网,限制了访问外网,电脑上网需要设置服务器代理。故此在通知页面底端添加了服务器代理的设置步骤和DNS设置步骤,...
  • suxinpaul
  • suxinpaul
  • 2015年02月04日 14:09
  • 745
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何编程动态改变IE的代理服务器设置, 并且使之马上生效!
举报原因:
原因补充:

(最多只允许输入30个字)