Невозможно запросить прокси-сервер «Автоматически определять настройки» в Windows 7 - PullRequest
3 голосов
/ 20 мая 2010

Я пытаюсь сохранить настройки прокси («Автоматически определять настройки»). Мой код работает на XP и Vista. Но это не работает на Windows 7

Пожалуйста, смотрите детали целевой платформы

Windows 7 Enterprise, IE 8.0.7600.16385, Wininet.dll 8.0.7600.16535

Пожалуйста, посмотрите фрагмент кода

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;
List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
List.pszConnection = NULL;
List.dwOptionCount = 1;
List.dwOptionError = 0;
List.pOptions = Option;

if(!InternetQueryOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, &nSize))
    AfxMessageBox(L"InternetQueryOption failed! (%d)\n");

TCHAR a[100];
swprintf(a, L"Flag value is : %d",Option[0].Value.dwValue, 80); 
AfxMessageBox(a);

Но в Windows 7, даже если в IE установлен параметр «Автоматически определять настройки», программа сообщает, что этот флаг не установлен

Я попытался с WinHttp API также, как показано ниже.

WINHTTP_CURRENT_USER_IE_PROXY_CONFIG stProxyConfig = {0};

WinHttpGetIEProxyConfigForCurrentUser(&stProxyConfig);

if (stProxyConfig.fAutoDetect == TRUE)
    AfxMessageBox(L"Auto proxy detection enabled");
else
    AfxMessageBox(L"Auto proxy detection disabled");

В Windows 7 приведенный выше код также не может захватить опцию «Автоматически определять настройки». Любой вклад в это высоко ценится.

Спасибо John

Ответы [ 2 ]

7 голосов
/ 28 февраля 2011

Это новая функция оптимизации производительности, представленная в IE8 под названием SmartWPAD.

WinINET отслеживает, есть ли в данной сети сервер WPAD (например, для поиска используется функция автоматического определения). Если в сети нет сервера WPAD, тогда WinINET эффективно «маскирует» бит «Использовать автоопределение», когда вы выполняете InternetQueryOption, так что ваш код не тратит кучу времени на поиск прокси, который не вернет прокси на эта сеть.

Если вы ДОЛЖНЫ получить состояние пользовательского интерфейса (отказ от функции WinINET SWPAD), потому что, например, вы планируете взять эту информацию и кэшировать ее для использования в какой-либо другой сети или в чем-то подобном, тогда вы должны сначала запросить INTERNET_PER_CONN_FLAGS_UI - при использовании этой опции вы получите состояние пользовательского интерфейса, независимое от функции SWPAD.

Если этот запрос не выполнен, значит, в системе запущена предыдущая версия Internet Explorer, и клиент должен запросить снова с INTERNET_PER_CONN_FLAGS.

1 голос
/ 07 ноября 2011

У меня есть фрагмент кода C #, где вы можете установить / снять флажок «Автоматически определять настройки» в настройках подключения IE. В этом фрагменте вы можете найти то, что ищете.

    public bool IsIEAutoDetectProxy(bool set)
    {
        // Setting Proxy information for IE Settings.
        RegistryKey RegKey = Registry.CurrentUser.OpenSubKey(@"Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Connections", true);
        byte[] defConnection = (byte[])RegKey.GetValue("DefaultConnectionSettings");
        if (defConnection[8] == Convert.ToByte(9))
           return true;
        else
           return false;
    } 
...