vidalia usar onion ocultar for configurar configuracion como avanzada c# proxy registry

usar - Configurar programáticamente la configuración del proxy del navegador en C#



proxy tor browser (6)

Estoy escribiendo una aplicación de winforms que necesita establecer la configuración de proxy de Internet Explorer y luego abrir una nueva ventana del navegador. Por el momento, estoy aplicando la configuración del proxy ingresando al registro:

RegistryKey registry = Registry.CurrentUser.OpenSubKey("Software//Microsoft//Windows//CurrentVersion//Internet Settings", true); registry.SetValue("ProxyEnable", 1); registry.SetValue("ProxyServer", "127.0.0.1:8080");

¿Entrar en el registro es la mejor manera de hacerlo, o hay un enfoque más recomendado? Me gustaría evitar cambios en el registro si hay una solución alternativa.


Echa un vistazo a este artículo de KB específicamente etiquetado en lo que intentas hacer.

La versión corta es que desea usar la API InternetOpen, InternetSetOption para actualizar la configuración del proxy.


Ejemplo de código rápido (de msdn):

WebProxy proxyObject = new WebProxy("http://proxyserver:80/",true); WebRequest req = WebRequest.Create("http://www.contoso.com"); req.Proxy = proxyObject;


Escribí un programa de 10 líneas para hacerlo, no dude en probar https://github.com/131/proxytoggle

using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; using Microsoft.Win32; namespace ProxyToggle { class Program { [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 void setProxy(string proxyhost, bool proxyEnabled) { const string userRoot = "HKEY_CURRENT_USER"; const string subkey = "Software//Microsoft//Windows//CurrentVersion//Internet Settings"; const string keyName = userRoot + "//" + subkey; Registry.SetValue(keyName, "ProxyServer", proxyhost); Registry.SetValue(keyName, "ProxyEnable", proxyEnabled?"1": "0"); // 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); } static void Main(string[] args) { if (args.Length == 0) { setProxy("", false); return; } setProxy(args[0], true); } } }


Esto depende un poco de tus necesidades exactas. Si está escribiendo una aplicación C # y simplemente quiere establecer la configuración proxy predeterminada que usará su aplicación, use la clase System.Net.GlobalProxySelection ( http://msdn.microsoft.com/en-us/library/system.net.globalproxyselection.aspx ). También puede establecer el proxy para cualquier conexión en particular con System.Net.WebProxy ( http://msdn.microsoft.com/en-us/library/system.net.webproxy.aspx ).

Si realmente desea actualizar la configuración del proxy en el registro, creo que necesitará usar P / Invoke para llamar a la función WinAPI WinHttpSetDefaultProxyConfiguration ( http://msdn.microsoft.com/en-us/library/aa384113.aspx ).



desde: http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/19517edf-8348-438a-a3da-5fbe7a46b61a

Agregue estas líneas al principio de su código:

utilizando System.Runtime.InteropServices; usando 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; bool settingsReturn, refreshReturn;

E implica el código:

RegKey.SetValue("ProxyServer", YOURPROXY); RegKey.SetValue("ProxyEnable", 1); // 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);