+
95
-

回答

可通过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);
}

网友回复

我知道答案,我要回答