最初发表在QQ空间,见:C++代码的维护,从实例说起
小问题有大智慧-代理服务器的监测 是几个月前的文章,最近碰到别人问如何设置代理的问题,又回顾了部分代码,虽然时间不长,还是有不少记不清了。,于是就整理了那个设置代理的函数,代码是实践的科学,每写一次,都会有点心得。
先把代码贴出来,这个函数的大概流程是,先查询当前的浏览器设置,然后根据用户的设定,再决定
1. 无代理
2. 使用自动配置脚本
3. 使用某个代理
这三个选项中的一个,根据不同的选项,设置具体的值,然后调用API设置代理选项。
void CWRSBar::ModifySetting( const Option::ProxyEntryInfo &pei )
{
// refer to following value in WinInet.h
// so as to use these values as index in array.
// :)
/*
#define INTERNET_PER_CONN_FLAGS 1
#define INTERNET_PER_CONN_PROXY_SERVER 2
#define INTERNET_PER_CONN_PROXY_BYPASS 3
#define INTERNET_PER_CONN_AUTOCONFIG_URL 4
#define INTERNET_PER_CONN_AUTODISCOVERY_FLAGS 5
*/
// 初始化数据结构,主要是Option数组
INTERNET_PER_CONN_OPTION_LIST List;
INTERNET_PER_CONN_OPTION Option[6];
unsigned long nSize = sizeof(List);
Option[0].dwOption = 0;
Option[0].Value.dwValue = 0;
// connection flags
Option[INTERNET_PER_CONN_FLAGS].dwOption = INTERNET_PER_CONN_FLAGS;
Option[INTERNET_PER_CONN_FLAGS].Value.dwValue = PROXY_TYPE_DIRECT;
//|PROXY_TYPE_AUTO_DETECT;
// proxy server
Option[INTERNET_PER_CONN_PROXY_SERVER].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
Option[INTERNET_PER_CONN_PROXY_SERVER].Value.pszValue = NULL;
// proxy bypass
Option[INTERNET_PER_CONN_PROXY_BYPASS].dwOption = INTERNET_PER_CONN_PROXY_BYPASS;
Option[INTERNET_PER_CONN_PROXY_BYPASS].Value.pszValue = NULL;
// auto config URL
Opti