使用VC,怎样设置IE代理服务的用户名和密码呢,IE窗口打开时不需要手工的输入,我使用修改注册表和InternetSetOption()的方法设置了ip地址和端口,但是不知道如何在程序中设置代理服务器的用户名和地址,我也试过InternetSetOption(NULL,INTERNET_OPTION_USERNAME,(LPVOID)user.c_str(),user.size()+1)来设置,但是没成功,大家帮帮忙

解决方案 »

  1.   

    刚刚有人问了吧?
    http://topic.csdn.net/u/20090803/09/29ebcef5-0000-49bd-b9a6-3b3694dc194c.html
      

  2.   

    参考一下:
    http://support.microsoft.com/kb/q195650/
      

  3.   

    我的代码BOOL SetProxy(const string &strFullAddr,const string &user, const string &passwd)
    {
    BOOL bResult;
    HKEY phKResult;
    DWORD dwcode = 0;
    LPCTSTR pchSubKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings";
    RegOpenKeyEx(HKEY_CURRENT_USER, pchSubKey, 0, KEY_ALL_ACCESS, &phKResult); //打开注册表
    int i = 1;
    RegSetValueEx(phKResult, "ProxyServer", 0, REG_SZ,(LPBYTE)strFullAddr.c_str(), strFullAddr.size()+1);//设置注册表键值
    RegCloseKey(phKResult);
    EnableProxy(true);//获得打开代理允许

    bResult = InternetSetOption(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, 0); //通知注册表中代理改变,下次连接时启动代理
        bResult = InternetSetOption(NULL ,INTERNET_OPTION_REFRESH , NULL, 0); //从注册表中读入代理
        DWORD size = sizeof(dwcode);
    HttpQueryInfo(NULL, HTTP_QUERY_FLAG_NUMBER |         
                 HTTP_QUERY_STATUS_CODE, &dwcode, &size , NULL);
    if(dwcode = HTTP_STATUS_PROXY_AUTH_REQ)//设置用户名和密码
    {
       bResult = InternetSetOption(NULL,INTERNET_OPTION_USERNAME,(LPVOID)user.c_str(),user.size()+1);
           bResult = InternetSetOption(NULL,INTERNET_OPTION_USERNAME,(LPVOID)passwd.c_str(),passwd.size()+1);
    }    return bResult;
    }
    虽然设置了ip和端口,但是用户名和密码设置不了
      

  4.   

         bResult = InternetSetOption(NULL,INTERNET_OPTION_USERNAME,(LPVOID)user.c_str(),user.size()+1);
           bResult = InternetSetOption(NULL,INTERNET_OPTION_USERNAME,(LPVOID)passwd.c_str(),passwd.size()+1);第二个参数怎么都是INTERNET_OPTION_USERNAME 应该不一样吧。
      

  5.   

    dwcode = HTTP_STATUS_PROXY_AUTH_REQ
    怎么用赋值运算符。。 应该是 dwcode == HTTP_STATUS_PROXY_AUTH_REQ 吧。另 HttpQueryInfo没有判断返回值。
      

  6.   

        bResult = InternetSetOption(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, 0);    //通知注册表中代理改变,下次连接时启动代理
        bResult = InternetSetOption(NULL ,INTERNET_OPTION_REFRESH , NULL, 0);    //从注册表中读入代理
    貌似要在最后调用。不然你白设置了。没刷进去。
      

  7.   

    不知道用户名和密码存储在注册表哪里,我改了一下代码的参数BOOL SetProxy(const string &strFullAddr)
     {
       ...
       ...
        //去掉下面
       /*  HttpQueryInfo(NULL, HTTP_QUERY_FLAG_NUMBER |         
                 HTTP_QUERY_STATUS_CODE, &dwcode, &size , NULL);
        if(dwcode = HTTP_STATUS_PROXY_AUTH_REQ)//设置用户名和密码
        {
           bResult = InternetSetOption(NULL,INTERNET_OPTION_USERNAME,(LPVOID)user.c_str  (),user.size()+1);
           bResult = InternetSetOption(NULL,INTERNET_OPTION_USERNAME,(LPVOID)passwd.c_str(),passwd.size()+1);
        }*/
        return bResult;
    }然后在调用时SetProxy("user:[email protected]:80"); 检测internet的选项,已经写进去了,可是还可以打开网页,我SetProxy("127.0.0.1:80")调用时就运行正确,是显示不了网页的,不知道为什么SetProxy("user:[email protected]:80");还能显示?
      

  8.   

    [Quote=引用 8 楼 rendao0563 的回复:]
        bResult = InternetSetOption(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, 0);    //通知注册表中代理改变,下次连接时启动代理
        bResult = InternetSetOption(NULL ,INTERNET_OPTION_REFRESH , NULL, 0);    //从注册表中读入代理
    貌似要在最后调用。不然你白设置了。没刷进去。
    [/Quote我试了,]放在最后也没效果,不知道哪里出问题
      

  9.   

    0 就是 FALSE。失败。取错误码啊。非要别人一步一步教?
      

  10.   

    在网上查了一下,有的说需要IAuthenticate:Authenticate,真的蒙了
      

  11.   

    你自己设一个比如djlfajkfjdkajkjafjlkdfzld这样的。然后用regedit搜。不就知道在哪了吗。