可通过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);
}
网友回复


