Как нажать кнопку ОК один раз, чтобы программно сменить IE прокси - PullRequest
3 голосов
/ 13 июля 2010

Я установил прокси-сервер Internet Explorer, используя следующий код.

RegistryKey RegKey = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true);
            RegKey.SetValue("ProxyServer", "proxyserver");
            RegKey.SetValue("ProxyEnable", 1);
            RegKey.SetValue("ProxyOverride", "domains;<local>", RegistryValueKind.String);

После запуска этого кода я вижу, что имя прокси-сервера доступно в настройках прокси в Internet Explorer. Но когда я захожу на веб-страницу в моей тестовой среде, я не вижу ее. Я обнаружил очень странное поведение Internet Explorer, что после настройки прокси через этот код мне нужно нажать кнопку «ОК» в настройках локальной сети, а затем нажать на веб-страницу, и я вижу ее правильно.

Я искал его в течение 4-5 часов и теперь очень смущен этим. Любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 13 июля 2010

Существует API для Internet Explorer, который следует использовать для изменения настроек.

Ссылка на Wininet: http://msdn.microsoft.com/en-us/library/aa385483(VS.85).aspx

После того, как вы изменили настройки прокси, вы должны позвонитьфункция InternetSetOption с флагами обновления, чтобы заставить Internet Explorer читать реестр и заново заполнять его настройки.Если вы уже изменили значения в реестре, вы можете просто вызвать следующую функцию (RefreshInternetExplorerSettings) впоследствии, чтобы вызвать обновление IE.

[DllImport("wininet.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern bool InternetSetOption(
    IntPtr hInternet,
    SET_OPTIONS option,
    IntPtr buffer,
    int bufferLength);

    public enum SET_OPTIONS
    {            
        INTERNET_OPTION_REFRESH = 37,
        INTERNET_OPTION_SETTINGS_CHANGED = 39,
        INTERNET_OPTION_PER_CONNECTION_OPTION = 75
    };

    private static void RefreshInternetExplorerSettings()
    {
        InternetSetOption(IntPtr.Zero, SET_OPTIONS.INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0);
        InternetSetOption(IntPtr.Zero, SET_OPTIONS.INTERNET_OPTION_REFRESH, IntPtr.Zero, 0);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...