2011-04-06 34 views
7

Estoy escribiendo un programa para cambiar automáticamente mi dirección proxy en función de la red a la que estoy conectado.Cómo cambiar la configuración LAN (configuración de proxy) programáticamente

Hasta ahora he conseguido que todo funcione, excepto la parte que he resaltado a continuación.

LAN Settings Dialog

¿Hay alguna forma de cambiar la secuencia de comandos de configuración automática y Detectar la configuración automáticamente en código?

La solución puede ser la edición de registro P/Invoke. Solo necesito algo que funcione.

Respuesta

14

Puede cambiar la configuración de proxy mediante el registro. Véase el siguiente enlace:
http://support.microsoft.com/kb/819961

ruta clave: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings

Valores:

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

Un question in SuperUser.com respecto a cómo desactivar automáticamente detectar ajustes en la configuración de proxy es decir. Deshabilitar "Detectar configuraciones automáticamente" en la configuración de proxy de IE

Un fragmento, tomado de Internet Explorer Automatic Configuration Script Definition via Registry.

Guión 1: Esto permite que la secuencia de comandos autoconf y define lo que es (intercambiar el http://xxxx con su script)

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 

Guión 2: Este script deshabilita la secuencia de comandos autoconf y permite a un servidor proxy con excepciones

 
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

Gracias por la información sobre la 'AutoConfigUrl'. Eso era algo que estaba buscando. Encontré cómo desactivar/habilitar la otra casilla de verificación (* Detectar configuraciones automáticamente *) leyendo [el comentario de Andrew Swan a la pregunta de SuperUser.com que vinculó] (http://superuser.com/questions/79703/disable-automatically) -detect-settings-in-ie-proxy-configuration/79718 # comment-217210). Básicamente dice restar 8 del noveno byte de 'HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Connections | DefaultConnectionSettings' para deshabilitar la opción. –

7

He buscado todo esto. Pero como no pude encontrar, escribí el siguiente fragmento de código que funciona para este propósito.

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

Mejor que http://support.microsoft.com/kb/819961, a través del archivo REG, debemos referirnos http://support.microsoft.com/kb/226473 "How to programmatically query and set proxy settings under Internet Explorer", utilice InternetSetOption().

Como http://blogs.msdn.com/b/ieinternals/archive/2013/10/11/web-proxy-configuration-and-ie11-changes.aspx dijo: "En lugar de intentar" insertar "el registro directamente, la forma correcta de actualizar la configuración del proxy es usar la API de InternetSetOption".

+0

Parece que requiere un poco de P/Invoke. Lo probaré y veré cómo funciona. Gracias. –

-1

Sólo se necesita modificar el valor:

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

Ver this link.

0

Estoy respondiendo porque no tengo permitido comentar las respuestas. Me gustaría señalar una diferencia entre manipular el registro vs usar InternetSetOptionAPI. Si introduce directamente el registro para cambiar la configuración de proxy, los navegadores como Chrome que dependen de la configuración del proxy de WinInet no recuperarán inmediatamente la nueva configuración, pero si cambia usando InternetSetOptionAPI, la nueva configuración se usará inmediatamente. Esta es mi experiencia.No entre en detalles para averiguar qué se puede hacer para recuperar la configuración después de manipular el registro.

EDIT: Con el fin de actualizar la configuración del proxy de WinInet puede hacer una simple API PInvoke de InternetSetOption de la siguiente manera

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

Fuente: Programmatically Set Browser Proxy Settings in C#

+1

Es más fácil y de hecho * más simple * cambiar la configuración del proxy a través del Registro de Windows. Puede averiguar cómo lo hice [aquí en un programa que escribí] (https://git.io/vKLsq) que cambia automáticamente la configuración del proxy en función de la configuración de la red. Lo esencial es recordar invocar el método ['InternetSetOption'] (http://www.pinvoke.net/default.aspx/wininet/internetsetoption.html) [después de realizar los cambios necesarios] (https://git.io/vKLsV) para notificar a otros programas del cambio. –

+0

Tienes razón Alex, acabo de verificar tu código en el enlace anterior, ya terminé combinando respuestas de esta publicación, así como la que mencioné en mi respuesta para obtener el resultado deseado. Gracias. – Rajeesh

Cuestiones relacionadas