Как изменить глобальный прокси Windows с помощью С#.NET с помощью "Немедленного эффекта"
Я пишу приложение Winform (С#.NET), чтобы изменить настройки прокси-сервера Windows 'Global (aka Internet Explorer).
Я использую это.
RegistryKey registry = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true);
registry.SetValue("ProxyEnable", 1);
registry.SetValue("ProxyServer", "127.0.0.1:8080");
Но он ведет себя странно. Я проверил это, используя два браузера
Когда я изменяю/Отключаю прокси-сервер во время работы Chrome. Chrome по-прежнему использует предыдущий прокси. Это изменение не влияет на его процесс. Но когда я просто открываю Internet Options(inetcpl.cpl) > Connections > LAN Settings
. Предыдущее изменение прокси-сервера теперь рассматривается. Когда я сказал, что просто открыто, я действительно имею в виду "Просто открыть". Я имею в виду, не редактируя и не нажимая никаких других кнопок. Я предполагаю, что тогда глобальный прокси-сервер действительно получает изменения (путем чтения из реестра), и Google Chrome сразу же вступает в силу.
Дело с Internet Explorer намного хуже. После изменения/отключения прокси-сервера с помощью моего приложения во время работы IE и даже после перехода в "Свойства обозревателя" (inetcpl.cpl) > "Подключения" > "Настройки Lan" не работает. Даже если я открою новую ссылку на новой вкладке. Я должен был перезапустить IE, чтобы это изменение было включено.
Поведение, которое я хочу, заключается в том, что всякий раз, когда я изменяю настройки прокси-сервера в своем приложении, все браузеры, которые используют глобальный прокси-сервер (независимо от того, работают ли они или нет), должны мгновенно включать изменение настроек.
Как я могу это достичь?
Ответы
Ответ 1
Поведение, которое я хочу, - это когда когда-либо Я меняю настройки прокси-сервера в своем приложении, все браузеры, которые используют глобальные прокси (независимо от того, запущены или нет) должны мгновенно включить изменение настроек.
Как я могу это достичь?
Для этого вам необходимо обновить свою систему.
Добавьте эти строки в начало вашего кода:
using System.Runtime.InteropServices;
using Microsoft.Win32;
Добавьте это в начало вашего класса:
[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;
static bool settingsReturn, refreshReturn;
И введите код:
RegistryKey registry = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true);
registry.SetValue("ProxyEnable", 1);
registry.SetValue("ProxyServer", YOURPROXY);
// These lines implement the Interface in the beginning of program
// They cause the OS to refresh the settings, causing IP to realy update
settingsReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0);
refreshReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0);
Ответ 2
Для IE:
Программно установить параметры прокси-сервера браузера на С#