2011-04-06 4 views
7

Я пишу программу для автоматического переключения моего прокси-адреса на основе сети, к которой я подключен.Как изменить настройки LAN (прокси-конфигурация) программно

У меня есть все, что нужно для работы, кроме той части, которую я выделил ниже.

LAN Settings Dialog

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

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

ответ

14

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

Key путь: 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>" 

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

Отрывок из взятого из Internet Explorer Automatic Configuration Script Definition via Registry.

Сценарий 1: Это позволяет AUTOCONF Script и определяет, что это такое (обмен 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 Script и позволяет прокси-сервер с исключениями.

 
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"="" 
+0

Спасибо за информацию о 'AutoConfigUrl'. Это была одна вещь, которую я искал. Я обнаружил, как отключить/включить другой флажок (* Автоматически определять настройки *), прочитав комментарий [Andrew Swan на вопрос SuperUser.com, который вы связали] (http://superuser.com/questions/79703/disable-automatically -detect-настройка-в-е-прокси-конфигурация/79718 # комментарий-217210). В основном это означает, что вычесть 8 из девятого байта «HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Connections | DefaultConnectionSettings', чтобы отключить эту опцию. –

7

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

/// <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

Лучше http://support.microsoft.com/kb/819961, с помощью REG-файла, мы должны обратиться http://support.microsoft.com/kb/226473 "How to programmatically query and set proxy settings under Internet Explorer", используйте InternetSetOption().

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

+0

Кажется, требуется довольно много P/Invoke. Я попробую и посмотрю, как это происходит. Благодарю. –

-1

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

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

См this link.

0

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

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

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); 
    } 
} 

Источник: Programmatically Set Browser Proxy Settings in C#

+1

Это проще и на самом деле * проще * изменить настройки прокси-сервера через реестр Windows. Вы можете узнать, как я это сделал (здесь, в программе, которую я написал) (https://git.io/vKLsq), которая автоматически изменяет настройки прокси-сервера в зависимости от конфигурации сети. Необходимо запомнить метод ['InternetSetOption'] (http://www.pinvoke.net/default.aspx/wininet/internetsetoption.html) [после внесения необходимых изменений] (https://git.io/vKLsV), чтобы уведомить другие программы об изменении. –

+0

Вы правы Алекс, я только что проверил ваш код по приведенной выше ссылке, я уже закончил комбинирование ответов с этого поста, а также тот, который я упомянул в своем ответе, чтобы получить желаемый результат. Благодарю. – Rajeesh

Смежные вопросы