最近帮朋友做个小工具,设置代理IP。在这里和大家分享一下。设置代理IP其实很简单,就是修改IE设置,但我们不可以能每次都手动调整。修改注册表就可以搞定他。代理IP分局域网代理和单位网络代理。两个的注册表也不一样的。多的不说了,我贴代理,大家一看就知道了
void CProxyDlg::SetPorxy(CString str, int isproxy)
{
CString ipstr = m_ipstr;
HKEY hKEY;
LPCTSTR data_Set="Software//Microsoft//Windows//CurrentVersion//Internet Settings";
//访问注册表,hKEY则保存此函数所打开的键的句柄
long ret0=(::RegOpenKeyEx(HKEY_CURRENT_USER,data_Set,0,KEY_WRITE,&hKEY));
if(ret0!=ERROR_SUCCESS) //如果无法打开hKEY,则中止程序的执行
{
AfxMessageBox("错误:无法打开有关的hKEY");
return;
}
//打开局域网代理
DWORD type = REG_DWORD ; //定义数据类型
long ret1=::RegSetValueEx(hKEY, "ProxyEnable", NULL, type, (LPBYTE)(&isproxy), 4);
if(ret1!=ERROR_SUCCESS)
{
AfxMessageBox("错误:无法设置有关的注册表信息");
return;
}
LPBYTE owner_Set=CString_To_LPBYTE(str); //定义用户姓名 owner_Set
type = REG_SZ ; //定义数据类型
int len = str.GetLength(); //定义数据长度
ret1=::RegSetValueEx(hKEY, "ProxyServer", NULL, type, owner_Set, len);
if(ret1!=ERROR_SUCCESS)
{
AfxMessageBox("错误:无法设置有关的注册表信息");
return;
}
//单独网络上网
data_Set="Software//Microsoft//Windows//CurrentVersion//Internet Settings//Connections";
//访问注册表,hKEY则保存此函数所打开的键的句柄
ret0=(::RegOpenKeyEx(HKEY_CURRENT_USER,data_Set,0,KEY_WRITE,&hKEY));
if(ret0!=ERROR_SUCCESS) //如果无法打开hKEY,则中止程序的执行
{
AfxMessageBox("错误:无法打开有关的hKEY");
return;
}
type = REG_BINARY ; //定义数据类型
UCHAR szBuf[80] = {0};
szBuf[0] = 0x3c;
szBuf[4] = 0x09;
if ( 1 == isproxy )
{
szBuf[8] = 0x03; //代理
}else
{
szBuf[8] = 0x01; //不代理
}
szBuf[12] = str.GetLength();
for (int i = 0; i < len; i++ )
{
szBuf[i+ 16] = str[i] ;
}
CString local = "<local>";
for (i = 0; i < 7; i++ )
{
szBuf[20 + str.GetLength() + i] = local[i];
}
ret1=::RegSetValueEx(hKEY, "宽带连接", NULL, type, (LPBYTE)(szBuf), 80);
if(ret1!=ERROR_SUCCESS)
{
AfxMessageBox("错误:无法设置有关的注册表信息");
return;
}
RegCloseKey(hKEY);
InternetSetOption(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, 0); //通知注册表中代理改变,下次连接时启动代理
InternetSetOption(NULL ,INTERNET_OPTION_REFRESH , NULL, 0); //从注册表中读入代理
}
http://download.csdn.net/source/2646323 可以下载这个小工具,有源代码