<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 崛起的程序員 閱讀(1283) 評論(0)  編輯  收藏 所屬分類: c/c++
    主站蜘蛛池模板: 伊人久久亚洲综合影院首页| 日韩精品亚洲人成在线观看| 成人亚洲国产va天堂| 免费人妻无码不卡中文字幕系| 亚洲熟女少妇一区二区| 亚洲天堂免费在线视频| 亚洲性久久久影院| aa午夜免费剧场| 国产精一品亚洲二区在线播放| a级成人毛片免费视频高清| 亚洲日韩乱码中文无码蜜桃臀网站 | 亚洲精品理论电影在线观看| 一个人免费观看www视频在线| 亚洲一线产区二线产区区| 在线免费观看一级毛片| 国产精品亚洲一区二区三区在线观看| 国产又粗又猛又爽又黄的免费视频 | 国产精品成人免费福利| 国产亚洲国产bv网站在线| 成人无遮挡毛片免费看| 国产亚洲精品免费| 中文字幕亚洲无线码a| 99视频免费观看| 亚洲人成人77777在线播放 | 四虎永久免费影院| 精品国产免费人成网站| 亚洲∧v久久久无码精品| 成人免费福利视频| 爱爱帝国亚洲一区二区三区| 在线观看亚洲精品国产| 最近中文字幕大全免费视频 | 久久九九免费高清视频| 91精品国产亚洲爽啪在线观看| 午夜国产精品免费观看| 特a级免费高清黄色片| 亚洲高清视频在线观看| 免费观看的a级毛片的网站| 国产精品永久免费| 亚洲精品国产肉丝袜久久| 国产hs免费高清在线观看| 日本免费在线观看|