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

news/2025/2/26 7:31:44
 
如何编程动态改变IE的代理服务器设置, 并且使之马上生效!     选择自 sxxny 的 Blog
关键字  IE 代理服务器
出处 

最近有很多朋友都在讨论如何改变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


作者Blog: http://blog.csdn.net/sxxny/

http://www.niftyadmin.cn/n/4819746.html

相关文章

正则表达式学与练

这两天,开始学习正则表达式,并且开始练习了. 首先,我没有下载正则表达式测试器的程序,因为我使用的是一个网页测试器,它的代码来自于: 正则表达式练习器 http://www.codefans.com/ArticleView/Article_5600.html 打开上面的页面&#xff0c;把Html代码复制下来&#xff0c;保…

PHP on Windows Azure 入门教学系列(3) ——在Windows Azure中部署Wordpress

公告&#xff1a;本博客为微软云计算中文博客的镜像博客。部分文章因为博客兼容性问题&#xff0c;会影响阅读体验。如遇此情况&#xff0c;请访问原博客。 本文是PHP on Windows Azure 入门教学系列第三篇文章。请上一篇文章中&#xff0c;我们已经成功的在Windows Azure中运行…

C语言左值和右值,以及操作符属性总结

《C和指针》这本书上讲到左值和右值&#xff0c;概念有点含糊 据我自己的理解&#xff1a; 左值&#xff1a;标识的应该是个存储位置&#xff0c;内存中的位置&#xff0c;左值可以是个变量名&#xff0c;或者是个表达式&#xff0c;但表达式必须表示的是个内存位置 右值&#…

流失的日子

2005年1月13日 妈妈今天早上因癌症去世了。。。八百里奔丧回家&#xff0c;泪满矜。。。 2004年10月3日 我唯一记念在心的只是你爱的被背叛,爱情已经不存在了.放不下的只是感觉,背后很累.而所有的一切都已成为现实. 生在这个世界上,总是被他人强迫,去遵守所谓的准则. 总有人…

shell脚本学习总结

看完了书《shell脚本学习指南》&#xff0c;顺便总结一下&#xff1a; 看了整本书&#xff0c;全部都是命令&#xff0c;但也确实很难记得命令的选项&#xff0c;所以学习方法就变了。 学习嘛&#xff0c;要考虑到遗忘的可能&#xff0c;既然会忘&#xff0c;还不如不去记&…

接触wxWindows

wxwindows介绍 【注1】wxwindows是一个开源的跨平台界面库。与其它实现&#xff0c;如QT、GTK不同&#xff0c;只是对各平台上的底层控件进行了封装。在windows下&#xff0c;使用的是mfc在linux下&#xff0c;使用的是gtk 在其它平台下也有相应的界面底层 但是&#xff0c;它…

上网记录

2005-2-28 13:50NND 今天竟然看到一片文章说《没有任何借口》(《No Excuse》)是一本伪造的书&#xff0c;郁闷&#xff01;&#xff01;&#xff01;http://blog.csdn.net/drate/archive/2005/02/15/288267.aspx 2004-2-27 今天初步查看了一下关于wxWindows的资料&#xff0c;…

IE编程技巧大全

IE编程技巧大全 黄森堂著 1.实现Ctrl&#xff0b;C: ExecWB(OLECMDID_COPY,OLECMDEXECOPT_DONTPROMPTUSER,NULL,NULL); 2.实现Ctrl&#xff0b;V: ExecWB(OLECMDID_PASTE,OLECMDEXECOPT_DONTPROMPTUSER,NULL,NULL); 3.实现查找: MSHTML::IHTMLDocument2Ptr pdoc;_var…