Я отвечаю, потому что мне запрещено комментировать ответы. Я хотел бы указать на разницу между манипулированием реестром и использованием 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 #