Как программно изменить настройки локальной сети (настройки прокси) - PullRequest
8 голосов
/ 06 апреля 2011

Я пишу программу для автоматического переключения моего прокси-адреса в зависимости от сети, к которой я подключен.

До сих пор у меня все работало, кроме части, которую я выделил ниже.

LAN Settings Dialog

Есть ли способ изменить скрипт автоматической настройки и автоматически определять настройки в коде?

Решением может быть редактирование реестра P / Invoke. Мне просто нужно что-то, что работает.

Ответы [ 5 ]

18 голосов
/ 06 апреля 2011

Вы можете изменить настройки прокси с помощью реестра.См. Следующую ссылку:
http://support.microsoft.com/kb/819961

Путь к ключу: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings

Значения:

"MigrateProxy"=dword:00000001
"ProxyEnable"=dword:00000001
"ProxyHttp1.1"=dword:00000000
"ProxyServer"="http://ProxyServername:80"
"ProxyOverride"="<local>"

A вопрос в SuperUser.com относительно того, как отключить автоматическое определение настроек в т.е конфигурации прокси.Отключить «Автоматическое определение настроек» в конфигурации прокси IE

Фрагмент, взятый из Определение сценария автоматической настройки Internet Explorer через реестр .

Сценарий 1: Это включает скрипт AutoConf и определяет, что это такое (замените http://xxxx на ваш скрипт)

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
"AutoConfigURL"="http://xxx.xxx.xxx.xxx.xxxx"
"ProxyEnable"=dword:00000000

Скрипт 2: Этот скрипт отключает скрипт AutoConf и включаетпрокси-сервер с исключениями.

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
"ProxyEnable"=dword:00000001
"ProxyOverride"="proxyexceptionname:portnumber;anotherexceptionname:port
"ProxyServer"="ftp=MyFTPProxy:Port;http=MYHTTPPROXY:PORT;https=MYHTTPSPROXY:PORT
"AutoConfigURL"=""
7 голосов
/ 07 ноября 2011

Я искал все это.Но, как я не смог найти, я написал приведенный ниже фрагмент кода, который подходит для этой цели.

    /// <summary>
    /// Checks or unchecks the IE Options Connection setting of "Automatically detect Proxy"
    /// </summary>
    /// <param name="set">Provide 'true' if you want to check the 'Automatically detect Proxy' check box. To uncheck, pass 'false'</param>
    public void IEAutoDetectProxy(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");
        byte[] savedLegacySetting = (byte[])RegKey.GetValue("SavedLegacySettings");
        if (set)
        {
            defConnection[8] = Convert.ToByte(9);
            savedLegacySetting[8] = Convert.ToByte(9);
        }
        else
        {
            defConnection[8] = Convert.ToByte(1);
            savedLegacySetting[8] = Convert.ToByte(1);
        }
        RegKey.SetValue("DefaultConnectionSettings", defConnection);
        RegKey.SetValue("SavedLegacySettings", savedLegacySetting);
    }
1 голос
/ 06 июля 2016

Я отвечаю, потому что мне запрещено комментировать ответы. Я хотел бы указать на разницу между манипулированием реестром и использованием InternetSetOptionAPI. Если вы напрямую перелистываете реестр, чтобы изменить настройки прокси-сервера, браузеры, такие как Chrome, который зависит от конфигурации прокси-сервера WinInet, не сразу получат новые настройки, но если вы измените их с помощью InternetSetOptionAPI, новые настройки будут использованы немедленно. Это мой опыт. Я не стал вдаваться в подробности, чтобы выяснить, что можно сделать, чтобы подобрать настройки после манипулирования реестром.

EDIT: Чтобы обновить настройки прокси-сервера WinInet, вы можете выполнить простой PInvoke API InternetSetOption следующим образом:

internal class InternetSetOptionApi
{
    [DllImport("wininet.dll")]
    public static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int dwBufferLength);
    public const int INTERNET_OPTION_SETTINGS_CHANGED = 39;
    public const int INTERNET_OPTION_REFRESH = 37;

    public static void RefreshWinInetProxySettings()
    {
        // These lines implement the Interface in the beginning of program 
        // They cause the OS to refresh the settings, causing IP to realy update
        InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0);
        InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0);
    }
}

Источник: Программно установить настройки прокси браузера в C #

1 голос
/ 29 декабря 2014

Лучше, чем http://support.microsoft.com/kb/819961, через файл .REG, мы должны обратиться к http://support.microsoft.com/kb/226473 " Как программно запрашивать и устанавливать настройки прокси в Internet Explorer ", использовать InternetSetOption ().

Как сказал http://blogs.msdn.com/b/ieinternals/archive/2013/10/11/web-proxy-configuration-and-ie11-changes.aspx: «Вместо того, чтобы пытаться« проткнуть »реестр напрямую, правильный способ обновить настройки прокси-сервера - использовать InternetSetOption API.»

0 голосов
/ 16 февраля 2015

Вам просто нужно изменить значение:

Registry Key : HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\
DWORD AutoDetect = 0 or 1

См. эту ссылку .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...