可通过c#修改注册表实现
using Microsoft.Win32; class Program { static void Main() { // 设置代理服务器地址和端口号 string proxyServer = "proxy.example.com:8080"; // 启用或禁用代理 bool enableProxy = true; // 设置代理类型,1为HTTP代理,2为SOCKS代理 int proxyType = 1; // 设置白名单,即允许代理的网站列表 string[] whitelist = { "example.com", "subdomain.example.com" }; // 修改代理设置 SetProxy(proxyServer, enableProxy, proxyType, whitelist); } static void SetProxy(string proxyServer, bool enableProxy, int proxyType, string[] whitelist) { try { // 代理服务器地址和端口号 string proxyValue = proxyServer; // 根据代理类型设置注册表项路径 string registryPath = (proxyType == 1) ? "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" : "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Connections"; // 打开注册表项 using (RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(registryPath, true)) { if (registryKey != null) { // 启用或禁用代理 registryKey.SetValue("ProxyEnable", enableProxy ? 1 : 0); // 设置代理服务器地址和端口号 registryKey.SetValue("ProxyServer", proxyValue); // 设置白名单 string whitelistValue = string.Join(";", whitelist); registryKey.SetValue("ProxyOverride", whitelistValue); } } // 通知系统更新代理设置 NativeMethods.InternetSetOption(IntPtr.Zero, NativeMethods.INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0); NativeMethods.InternetSetOption(IntPtr.Zero, NativeMethods.INTERNET_OPTION_REFRESH, IntPtr.Zero, 0); Console.WriteLine("代理设置已成功修改。"); } catch (Exception ex) { Console.WriteLine("修改代理设置时发生错误:" + ex.Message); } } } // NativeMethods 类用于调用 Windows API 函数 class NativeMethods { public const int INTERNET_OPTION_SETTINGS_CHANGED = 39; public const int INTERNET_OPTION_REFRESH = 37; [System.Runtime.InteropServices.DllImport("wininet.dll", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)] public static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int dwBufferLength); }
网友回复