<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-88  評論-77  文章-48  trackbacks-0

    摘選

    http://www.codeproject.com/internet/changeproxy1.asp

    Introduction

    Changing proxy settings of IE is a frequent requirement of mine. Then I got the idea of writing a tool by myself, at last. I have not found clear instructions on this. Many articles recommend to modify registry directly, but unfortunately their instruction is not enough. Most of them direct me to modify the following values in registry :-

    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
    "ProxyEnable"=dword:00000001
    "ProxyServer"=":"
    "ProxyOverride"=""
    "DisablePasswordCaching"=dword:00000001
    

    Details

    I tested it and find that it does not work at least on my computer.( I access internet by ADSL connection.) So I backed up registry and modified proxy settings via Internet Explorer, finding that [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections] is also changed. So I wrote the following code snippet to change proxy settings:

    Collapse
    				void ShowError(long lerr)
    {
        LPVOID lpMsgBuf;
        if (!FormatMessage( 
            FORMAT_MESSAGE_ALLOCATE_BUFFER | 
            FORMAT_MESSAGE_FROM_SYSTEM | 
            FORMAT_MESSAGE_IGNORE_INSERTS,
            NULL,
            lerr,
            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
            (LPTSTR) &lpMsgBuf,
            0,
            NULL ))
        {
            return;
        }
        MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
        LocalFree( lpMsgBuf );
    }
    void CieproxyDlg::OnBnClickedOk()
    {//set proxy server
        UpdateData();
        GetDlgItemText(IDC_EDIT1,m_sIEProxy);
        HKEY hk;
        LONG lret=RegOpenKeyEx(HKEY_CURRENT_USER,
            "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings",
            NULL,KEY_WRITE|KEY_SET_VALUE,&hk);
        if(lret==ERROR_SUCCESS&&NULL!=hk)
        {
            TCHAR* pbuf=m_sIEProxy.GetBuffer(1);
            lret=RegSetValueEx( hk,"ProxyServer",NULL,REG_SZ,pbuf,m_sIEProxy.GetLength());
            DWORD dwenable=1;
            lret=RegSetValueEx(hk,"ProxyEnable",NULL,REG_DWORD,
               (LPBYTE)&dwenable,sizeof(dwenable));
            RegCloseKey(hk);
        }
        const TCHAR* keyname3=_T(
          "software\\Microsoft\\windows\\currentversion\\Internet Settings\\Connections");
        lret=RegOpenKeyEx(HKEY_CURRENT_USER,keyname3,NULL,
            KEY_READ|KEY_WRITE|KEY_SET_VALUE,&hk);
        if(lret==ERROR_SUCCESS&&NULL!=hk)
        {
            DWORD dwtype;
            char pbuf[256];
            DWORD dwlen=sizeof(pbuf);
            constchar* valname="Connection to adsl3";
            lret=RegQueryValueEx(hk,valname,NULL,&dwtype,pbuf,&dwlen);
            if(lret!=ERROR_SUCCESS)
            {
                ShowError(lret);
            }
            pbuf[8] = 3;//enable proxy
            pbuf[4]=pbuf[4]+1;
            constchar* p=m_sIEProxy.GetBuffer(1);
            memcpy(pbuf+16,p,m_sIEProxy.GetLength());
            char c=0;
            for(int i=m_sIEProxy.GetLength();i<20;i++)
                pbuf[16+i]=c;
            m_sIEProxy.ReleaseBuffer();
            lret=RegSetValueEx(hk,valname,NULL,REG_BINARY,pbuf,dwlen);
            RegCloseKey(hk);
        }
        DWORD dwret;
        SendMessageTimeout(HWND_BROADCAST,WM_SETTINGCHANGE,NULL,NULL,
            SMTO_NORMAL,1000,&dwret);
    }
    
    void CieproxyDlg::OnBnClickedDisableProxy()
    {
        UpdateData();
        GetDlgItemText(IDC_EDIT1,m_sIEProxy);
        HKEY hk;
        LONG lret=RegOpenKeyEx(HKEY_CURRENT_USER,
            "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings",
            NULL,KEY_WRITE|KEY_SET_VALUE,&hk);
        if(lret==ERROR_SUCCESS&&NULL!=hk)
        {
            DWORD dwenable=0;
            lret=RegSetValueEx(hk,"ProxyEnable",NULL,REG_DWORD,
                (LPBYTE)&dwenable,sizeof(dwenable));
            RegCloseKey(hk);
        }
        const TCHAR* keyname3=_T(
          "software\\Microsoft\\windows\\currentversion\\Internet Settings\\Connections");
        lret=RegOpenKeyEx(HKEY_CURRENT_USER,keyname3,
            NULL,KEY_READ|KEY_WRITE|KEY_SET_VALUE,&hk);
        if(lret==ERROR_SUCCESS&&NULL!=hk)
        {
            DWORD dwtype;
            char pbuf[256];
            DWORD dwlen=sizeof(pbuf);
            constchar* valname="Connection to adsl3";
            lret=RegQueryValueEx(hk,valname,NULL,&dwtype,pbuf,&dwlen);
            if(lret!=ERROR_SUCCESS)
            {
                ShowError(lret);
            }
            pbuf[8] = 1;//enable proxy
            pbuf[4]=pbuf[4]+1;
            lret=RegSetValueEx(hk,valname,NULL,REG_BINARY,pbuf,dwlen);
            RegCloseKey(hk);
        }
        DWORD dwret;
        SendMessageTimeout(HWND_BROADCAST,WM_SETTINGCHANGE,NULL,NULL,SMTO_NORMAL,
            1000,&dwret);
    }

    Problem with above code is that existing Internet Explorer instances don't know the change of settings. What is more, changing registry directly is not an elegant method. Then the following must be more attractive :

    Collapse
    BOOL SetConnectionOptions(LPCTSTR conn_name,LPCTSTR proxy_full_addr)
    {
        //conn_name: active connection name. //proxy_full_addr : eg "210.78.22.87:8000"
        INTERNET_PER_CONN_OPTION_LIST list;
        BOOL    bReturn;
        DWORD   dwBufSize = sizeof(list);
        // Fill out list struct.
        list.dwSize = sizeof(list);
        // NULL == LAN, otherwise connectoid name.
        list.pszConnection = conn_name;
        // Set three options.
        list.dwOptionCount = 3;
        list.pOptions = new INTERNET_PER_CONN_OPTION[3];
        // Make sure the memory was allocated.if(NULL == list.pOptions)
        {
            // Return FALSE if the memory wasn't allocated.
            OutputDebugString("failed to allocat memory in SetConnectionOptions()");
            return FALSE;
        }
        // Set flags.
        list.pOptions[0].dwOption = INTERNET_PER_CONN_FLAGS;
        list.pOptions[0].Value.dwValue = PROXY_TYPE_DIRECT |
            PROXY_TYPE_PROXY;
    
        // Set proxy name.
        list.pOptions[1].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
        list.pOptions[1].Value.pszValue = proxy_full_addr;//"http://proxy:80";// Set proxy override.
        list.pOptions[2].dwOption = INTERNET_PER_CONN_PROXY_BYPASS;
        list.pOptions[2].Value.pszValue = "local";
    
        // Set the options on the connection.
        bReturn = InternetSetOption(NULL,
            INTERNET_OPTION_PER_CONNECTION_OPTION, &list, dwBufSize);
    
        // Free the allocated memory.delete [] list.pOptions;
        InternetSetOption(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, 0);
        InternetSetOption(NULL, INTERNET_OPTION_REFRESH , NULL, 0);
        return bReturn;
    }
    BOOL DisableConnectionProxy(LPCTSTR conn_name)
    {
        //conn_name: active connection name. 
        INTERNET_PER_CONN_OPTION_LIST list;
        BOOL    bReturn;
        DWORD   dwBufSize = sizeof(list);
        // Fill out list struct.
        list.dwSize = sizeof(list);
        // NULL == LAN, otherwise connectoid name.
        list.pszConnection = conn_name;
        // Set three options.
        list.dwOptionCount = 1;
        list.pOptions = new INTERNET_PER_CONN_OPTION[list.dwOptionCount];
        // Make sure the memory was allocated.if(NULL == list.pOptions)
        {
            // Return FALSE if the memory wasn't allocated.
            OutputDebugString("failed to allocat memory in DisableConnectionProxy()");
            return FALSE;
        }
        // Set flags.
        list.pOptions[0].dwOption = INTERNET_PER_CONN_FLAGS;
        list.pOptions[0].Value.dwValue = PROXY_TYPE_DIRECT  ;
        // Set the options on the connection.
        bReturn = InternetSetOption(NULL,
            INTERNET_OPTION_PER_CONNECTION_OPTION, &list, dwBufSize);
        // Free the allocated memory.delete [] list.pOptions;
        InternetSetOption(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, 0);
        InternetSetOption(NULL, INTERNET_OPTION_REFRESH , NULL, 0);
        return bReturn;
    }

    The usage is very straightforward:

    				//set proxy
    				const
    				char* connection_name="Connection to adsl3";
        SetConnectionOptions(connection_name,"62.81.236.23:80");
    //disable proxy 
        DisableConnectionProxy(connection_name);
        

    Existing Internet Explorer instances are notified by INTERNET_OPTION_SETTINGS_CHANGED and INTERNET_OPTION_REFRESH

    posted on 2007-01-25 20:06 崛起的程序員 閱讀(1291) 評論(0)  編輯  收藏 所屬分類: c/c++
    主站蜘蛛池模板: 久久精品国产亚洲AV未满十八| 国产亚洲婷婷香蕉久久精品| 亚洲kkk4444在线观看| ww4545四虎永久免费地址| 久久久久亚洲精品天堂| 91热久久免费精品99| 亚洲最大免费视频网| 可以免费看黄的网站| 亚洲自偷自拍另类图片二区| 男人进去女人爽免费视频国产| 久久夜色精品国产亚洲 | 亚洲日本成本人观看| 思思re热免费精品视频66| 亚洲人成综合在线播放| 好吊妞在线成人免费| 性色av极品无码专区亚洲| 亚洲成a人片在线观看久| 国产成人精品免费大全| a级毛片在线免费观看| 日本亚洲视频在线 | 97无码免费人妻超级碰碰碰碰| 亚洲专区中文字幕| 国产精品免费综合一区视频| 一级毛片aaaaaa视频免费看| 亚洲精品无码久久千人斩| 亚洲黄色免费观看| 亚洲av无码专区在线电影| 国产精品亚洲美女久久久| 久久aⅴ免费观看| 亚洲高清中文字幕免费| 亚洲人成网站在线观看青青| 免费毛片a线观看| 亚洲中文字幕久久精品无码A| 亚洲AV无码一区二区三区国产| 成人片黄网站色大片免费观看APP| 亚洲熟妇无码久久精品| 四虎免费久久影院| 免费A级毛片无码专区| 色婷婷六月亚洲综合香蕉| 亚洲av无码一区二区三区不卡| 2020久久精品国产免费|