C# 修改系统全局代理配置

这篇具有很好参考价值的文章主要介绍了C# 修改系统全局代理配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

[文 / 张赐荣]

许多应用程序都提供了一个图形化的界面让用户设置代理服务器。但是,有时候我们需要在程序中自动设置代理服务器,而不需要用户手动进行设置。在这种情况下,通过修改注册表的方式来设置代理服务器就非常适用。

本文将介绍下面的C#代码的作用和实现原理,并重点介绍如何使用该代码实现Windows全局代理服务器的设置。

---代码---

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using Microsoft.Win32;

namespace ConsoleApplication
{
    static class ProxySetting
    {
        [DllImport("wininet.dll")]
        private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int dwBufferLength);
        private const int INTERNET_OPTION_SETTINGS_CHANGED = 39;
        private const int INTERNET_OPTION_REFRESH = 37;

        public static bool setProxy(string proxyhost, bool proxyEnabled)
        {
            try
            {
                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, "ProxyOverride", "<local>");
                Registry.SetValue(keyName, "ProxyEnable", proxyEnabled ? "1" : "0", RegistryValueKind.DWord);
                InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0);
                InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0);
                return (true);
            }
            catch (Exception)
            {
                return (false);
            }
        }
    }
}

----------

1. SetProxy的作用和实现原理
SetProxy是一个用于设置代理服务器的方法。在网络环境中,代理服务器常常用于过滤和转发网络请求,以保证网络安全和性能优化。在许多应用程序中,可以使用代理服务器来访问Internet。例如,浏览器可以通过代理服务器访问Internet,以保护用户的隐私和安全。因此,设置代理服务器是一项重要的任务。
在C#中,可以使用Registry.SetValue方法来修改注册表中的值,以设置代理服务器。具体而言,我们可以使用该方法修改以下三个键值:
ProxyServer:代理服务器的主机名和端口号。
ProxyOverride:指定不使用代理服务器的本地地址列表。此处只包括了一个 <local> 字符串,表示本地地址不使用代理服务器。
ProxyEnable:代理服务器是否启用的标志位,1表示启用,0表示禁用。
除此之外,我们还需要使用API函数来确保更改生效。具体而言,我们需要使用InternetSetOption函数来修改Internet选项的设置,并使用INTERNET_OPTION_SETTINGS_CHANGED和INTERNET_OPTION_REFRESH参数指示更改了Internet选项的设置,并重新加载所有Internet选项的设置。这将确保代理服务器设置立即生效。
因此,我们可以通过调用SetProxy方法来设置代理服务器。该方法接受两个参数:
proxyhost:代理服务器的主机名和端口号,例如:"proxy.example.com:8080"。
proxyEnabled:一个布尔值,指示代理服务器是否启用。
在方法内部,我们将使用Registry.SetValue方法来修改注册表中的键值,并使用InternetSetOption函数来确保更改生效。最后,该方法将返回一个布尔值,指示设置是否成功。

2. 使用SetProxy设置代理服务器
在本节中,我们将介绍如何使用SetProxy方法来设置代理服务器。具体而言,我们将使用以下步骤:
引入命名空间。
调用SetProxy方法来设置代理服务器。
2.1 引入命名空间
在使用SetProxy方法之前,我们需要引入一些命名空间。具体而言,我们需要使用以下命名空间:
using System;
using Microsoft.Win32;
其中,System命名空间包含一些基本的类型和常用的函数。Microsoft.Win32命名空间包含用于访问注册表的类。
2.2 调用SetProxy方法来设置代理服务器
在引入命名空间之后,我们可以直接调用SetProxy方法来设置代理服务器。以下是一个示例代码:
string proxyhost = "proxy.example.com:8080";
bool proxyEnabled = true;
bool result = ProxySetting.setProxy(proxyhost, proxyEnabled);
if (result)
{
Console.WriteLine("代理服务器设置成功");
}
else
{
Console.WriteLine("代理服务器设置失败");
}
在上述代码中,我们首先定义了代理服务器的主机名和端口号,并指定代理服务器启用。然后,我们调用ProxySetting.setProxy方法来设置代理服务器。如果设置成功,将打印"代理服务器设置成功",否则将打印"代理服务器设置失败"。
3. 使用的技术和相关函数
在上述代码中,我们使用了以下技术和相关函数:
Registry.SetValue:用于修改注册表中的值。
InternetSetOption:用于修改Internet选项的设置。
DllImport:用于在C#中引用C/C++ DLL函数。
IntPtr:用于表示一个指针或句柄。
int:用于表示整数值。
bool:用于表示布尔值。
const:用于定义常量。
RegistryValueKind:用于表示注册表值的数据类型。
除此之外,我们还引入了以下命名空间:
System:包含一些基本的类型和常用的函数。
Microsoft.Win32:包含用于访问注册表的类。
4.注意事项
修改注册表需要管理员权限。因此,在运行程序时需要以管理员身份运行。
总的来说,使用SetProxy方法可以很方便地设置代理服务器。该方法实现简单,但是功能强大,可以用于许多不同的应用程序和场景。

参考:
https://stackoverflow.com/questions/2020363/how-to-change-global-windows-proxy-using-c-sharp-net-with-immediate-effect
 文章来源地址https://www.toymoban.com/news/detail-646112.html

到了这里,关于C# 修改系统全局代理配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#文件读取的全局配置编程方法

    C#怎样在类库或者应用入口从配置文件读取参数,并作用到全局。 面向对象的程序有很多类库分布在很多cs文件,如何全局起作用。 如何从可读可编辑的文本导入配置。 静态类保存全局变量。 json文件保存,可读。Newtonsoft.json 软件导入方便。 关于newtonsoft开源许可:\\\"Json.NET

    2024年02月14日
    浏览(59)
  • 报错 “代理XP“组件已作为此服务器安全配置的一部分被关闭。系统管理员可以使用sp_configure来 启用“代理XP”。

    想为 SQL Server 数据库设置自动备份,点击 维护计划向导 的时候报错 “代理XP\\\"组件已作为此服务器安全配置的一部分被关闭。系统管理员可以使用sp_configure来启用\\\"代理XP”。有关启用\\\"代理XP\\\"的详细信息,请参阅SQL Server联机丛书中的\\\"外围应用配 置器”。(MicrosoftSqlServer.Manage

    2024年02月12日
    浏览(52)
  • C# WebSocket 服务器

    *******************websocket服务器************************************** 第一步:创建HttpListener类,并启动监听:             var listener = new HttpListener();             listener.Prefixes.Add(\\\"http://10.10.13.140:8080/\\\");             listener.Start(); 第二步:等待连接 var context = listener.GetContext(); 第三步:

    2024年02月20日
    浏览(38)
  • c#构建具有用户认证与管理的socks5代理服务端

    Socks 协议是一种代理 (Proxy) 协议, 例如我们所熟知的 Shdowsocks 便是 Socks 协议的一个典型应用程序, Socks 协议有多个版本, 目前最新的版本为 5, 其协议标准文档为 RFC 1928。 我们一起来使用.net 7 构建一个支持用户管理的高性能socks5代理服务端 目录 协议流程 1 client - server 客户端与

    2024年02月05日
    浏览(33)
  • TCP服务器的C#实现

    1、TCP实现类 2、页面布局 3、后台代码 4、运行结果

    2024年02月09日
    浏览(43)
  • c# 代码操作ftp服务器文件

    好久不见,我又回来了。给大家分享一个最近c#代码操作ftp服务器的代码示例   基础类的构造函数和属性       FtpOperation 中其他的方法 调用示例  贴了半天代码,都不太行,一会能展开,一会展不开,源码地址放下面了。 项目地址:https://github.com/yycb1994/FtpSiteManager

    2024年02月21日
    浏览(44)
  • C#网络TCP服务器端的实现

    1、实现代码 2、运行效果

    2024年02月11日
    浏览(44)
  • C# 中,使用OpcUaHelper读写OPC服务器

    nuget包 帮助类: Winform: KepServer 设置: 结果:

    2024年02月10日
    浏览(38)
  • c#通过opcautomation获取opc服务器数据

    本代码是一个基于OPCAutomation的OPC连接程序,通过此程序可以连接OPC服务器并读取OPCItem的值。程序的主要功能包括: 连接到指定的OPC服务器 断开连接 读取指定OPCItem的值 定时读取OPCItem的值 暂停/继续读取OPCItem的值 程序使用了OPCAutomation库,在程序中实例化了OPCServer和OPCBrows

    2024年01月21日
    浏览(41)
  • C# Tcplistener,Tcp服务端,Tcp心跳包服务器简易封装

    我最近有个需求要写Tcp服务端,我发现Tcp服务端的回调函数比较麻烦,简化Tcp的服务,我打算自己封装一个简单的Tcp服务端。 C# TCP应用编程三 异步TCP应用编程 C# Tcpclient Tcplistener 服务器接收多个客户端消息通讯 关于C#Socket断开重连问题 我最近有个Tcp服务端的项目,发现TcpL

    2024年01月19日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包