IE代理设置

来源:互联网 发布:小站雅思有mac版吗 编辑:程序博客网 时间:2024/04/24 09:00


// TODO
class CSetIEProxy
{
public:
 CSetIEProxy()
 {

 }
 virtual ~CSetIEProxy()
 {

 }
 
public:
 //
 // 设置代理
 //
 BOOL SetProxy(CString strProxyServer)
 {
  if (SetProxyOption(strProxyServer) && EnableConnetByLan())
  {
   return TRUE;
  }
  return FALSE;
 }

 //
 // 取消代理
 //
 BOOL CanCelProxy()
 {
  if (DisableConnectionProxy() && DisableConnetByLan())
  {
   return TRUE;
  }
  return FALSE;
 }
 
 //
 // 得到代理(此函数功能有待开发)
 //
 void GetProxy()
 {
  GetProxyOption();
 }
 
protected:
 //
 // 设置Internet代理连接选项
 //
 BOOL SetProxyOption(CString strProxyServer)
 {
  INTERNET_PER_CONN_OPTION_LIST List;
  INTERNET_PER_CONN_OPTION Option[3];
  unsigned long nSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
  
  Option[0].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
  Option[0].Value.pszValue = (LPTSTR)(LPCTSTR)strProxyServer;
  
  Option[1].dwOption = INTERNET_PER_CONN_FLAGS;
  Option[1].Value.dwValue = PROXY_TYPE_PROXY;
  Option[1].Value.dwValue |= PROXY_TYPE_DIRECT;
  
  // This option sets all the possible connection types for the client.
  // This case specifies that the proxy can be used or direct connection is possible.
  Option[2].dwOption = INTERNET_PER_CONN_PROXY_BYPASS;
  Option[2].Value.pszValue = _T("<local>");
  
  List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
  List.pszConnection = NULL;
  List.dwOptionCount = 3;
  List.dwOptionError = 0;
  List.pOptions = Option;
  
  if (!InternetSetOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, nSize))
  {
   return FALSE;
  }
  
  Update();

  return TRUE;
 }

 //
    // 得到Internet代理连接选项
 //
 void GetProxyOption()
 {
  INTERNET_PER_CONN_OPTION_LIST iOptionList;      //////Internet连接选项
  INTERNET_PER_CONN_OPTION  iOptions[3];
  ULONG       uSize = sizeof(iOptionList);
  
  iOptionList.dwSize   = uSize;
  iOptionList.pszConnection = NULL;
  iOptionList.dwOptionCount = 3;
  iOptionList.pOptions  = iOptions;
  
  // set proxy type direct or proxy server
  iOptions[0].dwOption = INTERNET_PER_CONN_FLAGS;
  iOptions[1].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
  iOptions[2].dwOption = INTERNET_PER_CONN_PROXY_BYPASS;
  
  if(InternetQueryOption(NULL,INTERNET_OPTION_PER_CONNECTION_OPTION ,(LPVOID)(&iOptionList),&uSize))
  {
   GlobalFree(iOptionList.pOptions[1].Value.pszValue);
   GlobalFree(iOptionList.pOptions[2].Value.pszValue);
   GlobalFree(iOptionList.pOptions[3].Value.pszValue);
  }
 }

 //
 // 取消IE代理设置
 //
 BOOL DisableConnectionProxy()  
 {  
  INTERNET_PER_CONN_OPTION_LIST List;
  INTERNET_PER_CONN_OPTION Option[1];
  unsigned long nSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
  
  Option[0].dwOption = INTERNET_PER_CONN_FLAGS;
  Option[0].Value.dwValue = PROXY_TYPE_DIRECT;
  
  List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
  List.pszConnection = NULL;
  List.dwOptionCount = 1;
  List.dwOptionError = 0;
  List.pOptions = Option;
  
  if (!InternetSetOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, nSize))
  {
   return FALSE;
  }
  
  Update();

  return TRUE;
 }

 // 使代理可用
 //
 // 修改IE拨号选项,改为不拨号
 //
 BOOL EnableConnetByLan()
 {
  HKEY hKey = OpenRegister();
  if (NULL == hKey)
  {
   return FALSE;
  }
  
  DWORD dw = FALSE;
  if (ERROR_SUCCESS != RegSetValueEx(hKey,                     // subkey handle
   _T("EnableAutodial"),                               // value name
   0,                                       // must be zero
   REG_DWORD,                                               // value type
   (LPBYTE)&dw,                                             // pointer to value data
   sizeof(dw)))
  {
   RegCloseKey(hKey);
   return FALSE;
  }
  RegCloseKey(hKey);
  Update();
  
  return TRUE;
 }

 // 使代理不可用
 //
 // 修改IE拨号选项,改为拨号
 //
 BOOL DisableConnetByLan()
 {
  HKEY hKey = OpenRegister();
  if (NULL == hKey)
  {
   return FALSE;
  }

  DWORD dw = TRUE;
  if (ERROR_SUCCESS != RegSetValueEx(hKey,                     // subkey handle
   _T("EnableAutodial"),                               // value name
   0,                                       // must be zero
   REG_DWORD,                                               // value type
   (LPBYTE)&dw,                                             // pointer to value data
   sizeof(dw)))
  {
   RegCloseKey(hKey);
   return FALSE;
  }
  
  RegCloseKey(hKey);
  Update();

  return TRUE;
 }

 // 打开注册表项
 HKEY CSetIEProxy::OpenRegister()
 {
  HKEY hKey;
  DWORD dwDisp;
  long lResult = 0;
  lResult = RegCreateKeyEx(HKEY_CURRENT_USER,
   _T("Software//Microsoft//Windows//CurrentVersion//Internet Settings"),
   0,
   _T(""),
   0,
   0,
   NULL,
   &hKey,
   &dwDisp);
  if (ERROR_SUCCESS != lResult)
  {
   hKey = NULL;
  }
  
  return hKey;
 }
 
 // 更新代理
 void CSetIEProxy::Update()
 {
  //通知:注册表中代理改变,下次连接时启动代理
  InternetSetOption(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, 0);
  //从注册表中读入代理
  InternetSetOption(NULL, INTERNET_OPTION_REFRESH , NULL, 0);
 }
};

如果需要枚举拨号连接,可以使用 RasEnumConnections
//   详细的请见 BLOG.CSND.NET/HAPPYHELL

原创粉丝点击