Как изменить Глобальный Windows Proxy с помощью C#.NET с 'Непосредственным Эффектом'

Я пишу Winform (C#.NET) приложение для изменения Глобального Windows (иначе 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");

Но его поведение странным способом. Я протестировал это использование двух браузеров

  • Google Chrome:

Когда я изменяюсь/Запрещаю прокси, в то время как Chrome работает. Chrome все еще использует предыдущий прокси. Изменение не производит свой процесс. Но когда я ПРОСТО открываюсь Internet Options(inetcpl.cpl) > Connections > LAN Settings. Предыдущее изменение прокси теперь рассматривают. Когда я сказал Просто открытый, я действительно имею в виду Просто открытый. Я имею в виду, не редактируя или нажимая любые другие кнопки. Я предполагаю, затем, глобальный прокси действительно становится измененным (путем чтения из реестра), и Google Chrome сразу берет эффект.

  • Internet Explorer 8:

Случай с Internet Explorer намного хуже. После изменения/отключения прокси с помощью моего приложения, в то время как IE работает и Даже за движением к "интернет-Опциям (inetcpl.cpl)> Соединения>, настройки локальной сети" рабочий прокси IE не становятся затронутыми. Даже, если я не открываю новую ссылку на новой вкладке. Я должен был перезапустить IE для того изменения, которое будет включено.

Поведение, которое я хочу, состоит в том, что каждый раз, когда я изменяю настройки прокси в своем приложении, все браузеры, которые используют глобальный прокси (независимо от того, ли они работают или не) должны немедленно включить изменение в настройки.

Как я могу достигнуть этого?

19
задан T.Rob 28 November 2011 в 03:04
поделиться

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);
23
ответ дан 30 November 2019 в 04:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: