C#实现启用与禁用本地网络的方式小结【3种方式】

C#实现启用与禁用本地网络的方式小结【3种方式】

方式1:使用Windows API函数

  • 引用System.Runtime.InteropServices命名空间
  • 定义Windows API函数,并声明相关参数
  • 调用Windows API函数

示例代码

using System.Runtime.InteropServices;

// 定义Windows API函数
[DllImport("wininet.dll")]
private extern static bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int dwBufferLength);

// 启用本地网络
public bool EnableLocalNetwork()
{
    const int INTERNET_OPTION_SETTINGS_CHANGED = 39;
    const int INTERNET_OPTION_REFRESH = 37;

    bool success = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0);
    success &= InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0);
    return success;
}

// 禁用本地网络
public bool DisableLocalNetwork()
{
    const int INTERNET_OPTION_SETTINGS_CHANGED = 39;
    const int INTERNET_OPTION_REFRESH = 37;
    const int INTERNET_OPTION_PROXY_SETTINGS_CHANGED = 95;

    bool success = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_PROXY_SETTINGS_CHANGED, IntPtr.Zero, 0);
    success &= InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0);
    success &= InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0);
    return success;
}

方式2:使用Process.Start启动CMD命令

  • 使用Process.Start方法启动CMD程序,并设置启动参数
  • 使用StandardInput写入CMD命令
  • 使用StandardOutput读取CMD输出

示例代码

using System.Diagnostics;

// 启用本地网络
public bool EnableLocalNetwork()
{
    Process p = new Process();
    p.StartInfo.FileName = "cmd.exe";
    p.StartInfo.Arguments = "/c netsh interface set interface \"本地连接\" admin=enable";
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.RedirectStandardInput = true;
    p.StartInfo.RedirectStandardOutput = true;
    p.StartInfo.CreateNoWindow = true;

    p.Start();
    p.StandardInput.WriteLine();
    p.StandardInput.Close();

    string output = p.StandardOutput.ReadToEnd();
    p.WaitForExit();

    return output.Contains("已成功完成");
}

// 禁用本地网络
public bool DisableLocalNetwork()
{
    Process p = new Process();
    p.StartInfo.FileName = "cmd.exe";
    p.StartInfo.Arguments = "/c netsh interface set interface \"本地连接\" admin=disable";
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.RedirectStandardInput = true;
    p.StartInfo.RedirectStandardOutput = true;
    p.StartInfo.CreateNoWindow = true;

    p.Start();
    p.StandardInput.WriteLine();
    p.StandardInput.Close();

    string output = p.StandardOutput.ReadToEnd();
    p.WaitForExit();

    return output.Contains("已成功完成");
}

方式3:使用WMI(Windows Management Instrumentation)

  • 引用System.Management命名空间
  • 使用ManagementObjectSearcher对象获取适配器信息
  • 使用ManagementObject的InvokeMethod方法执行相应操作

示例代码

using System.Management;

// 获取适配器信息
private ManagementObject GetAdapter()
{
    ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapter WHERE Name='本地连接'");
    foreach (ManagementObject mo in searcher.Get())
    {
        return mo;
    }
    return null;
}

// 启用本地网络
public bool EnableLocalNetwork()
{
    ManagementObject adapter = GetAdapter();
    if (adapter == null) return false;

    ManagementBaseObject inParams = adapter.GetMethodParameters("Enable");
    ManagementBaseObject outParams = adapter.InvokeMethod("Enable", inParams, null);

    uint resultCode = (uint)outParams["returnValue"];
    return resultCode == 0;
}

// 禁用本地网络
public bool DisableLocalNetwork()
{
    ManagementObject adapter = GetAdapter();
    if (adapter == null) return false;

    ManagementBaseObject inParams = adapter.GetMethodParameters("Disable");
    ManagementBaseObject outParams = adapter.InvokeMethod("Disable", inParams, null);

    uint resultCode = (uint)outParams["returnValue"];
    return resultCode == 0;
}

以上三种方式都可以实现启用与禁用本地网络的功能,其中使用Process.Start启动CMD命令的方式速度较快,但需要使用CMD命令实现,而使用WMI的方式则比较稳定,但速度相对较慢。具体选择哪种方式可以根据实际需求进行选择。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现启用与禁用本地网络的方式小结【3种方式】 - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • asp实现的sha1加密解密代码(和C#兼容)

    下面是详细讲解“ASP实现的SHA1加密解密代码(和C#兼容)”的攻略: 概述 SHA1(Secure Hash Algorithm 1)是一种常用的哈希算法。在ASP中,可以使用VBScript或者JScript来实现SHA1加密解密操作。下面我们就来介绍如何在ASP中实现SHA1加密解密操作,并且使代码与C#兼容。 实现步骤 1. 引入JavaScrip…

    C# 2023年6月7日
    00
  • C#中实现任意List的全组合算法代码

    以下是详细的攻略步骤: 1. 确定算法 全组合算法可以用以下方式递归实现: 对于List的每个元素,有两种情况:选择与不选择 当选择了一个元素时,接下来需要从剩下的元素中选择 当不选择一个元素时,同样需要从剩下的元素中选择 递归执行以上步骤,直到剩下的元素集合为空,即为一种排列结果 这样,我们可以写出以下的伪代码。 // 全组合算法 public stati…

    C# 2023年6月1日
    00
  • Entity Framework使用DBContext实现增删改查

    以下是关于Entity Framework使用DbContext实现增删改查的完整攻略。 一、什么是Entity Framework Entity Framework 是微软提供的一种ORM(对象关系映射)框架,它将关系型数据库中的数据转换成.NET中的对象,开发者可以通过对象的方式来操作数据库,并且Entity Framework可以自动将对象转化为SQL…

    C# 2023年6月3日
    00
  • C#中截取字符串的的基本方法详解

    C#中截取字符串的基本方法详解 前言 C#中操作字符串是开发中必不可少的一项技能,对字符串截取更是至关重要。本文将详细介绍C#中截取字符串的基本方法,希望能对大家有所帮助。 Substring方法 C#中内置的字符串截取方法是Substring。它可以通过指定起始位置和截取长度来截取字符串。 下面是一个示例: string str = "Hello…

    C# 2023年6月8日
    00
  • C#实现获取不同对象中名称相同属性的方法

    获取不同对象中名称相同属性的方法,可以通过反射实现。以下是C#实现该方法的步骤和示例说明: 步骤 步骤一:获取对象类型 使用GetType()方法获取对象的类型,返回Type类型的实例。 Type objectType = objectInstance.GetType(); 步骤二:获取属性信息 使用GetProperties()方法获取对象的所有属性,返回…

    C# 2023年5月31日
    00
  • C#编程实现Excel文档中搜索文本内容的方法及思路

    C#编程实现Excel文档中搜索文本内容的方法及思路 在 C# 编程中,实现搜索 Excel 文档中的文本内容是一个常见的需求。本文将介绍如何使用 C# 进行 Excel 文档的搜索文本内容,并附带两个示例说明。 思路 实现搜索 Excel 文档中的文本内容,可以采用以下步骤: 打开需要搜索的 Excel 文档。 遍历 Excel 文档中的所有单元格,查找包…

    C# 2023年6月8日
    00
  • 找到整型阵列中最大值和最小值的几种方法总结

    当我们需要在整数数组中查找最大值和最小值时,有多种方法可以实现。本文将总结其中的几种方法并进行详细讲解。 方法一:遍历数组 最简单的方法就是遍历整个数组并查找最大值和最小值。我们可以使用两个变量来记录当前的最大值和最小值,然后遍历整个数组,对于每个元素,分别与最大值和最小值进行比较,如果比最大值大就更新最大值,如果比最小值小就更新最小值。最终遍历完成后,最大…

    C# 2023年6月7日
    00
  • asp.net 程序性能优化的七个方面 (c#(或vb.net)程序改进)

    下面是“asp.net程序性能优化的七个方面(c#(或vb.net)程序改进)”的完整攻略: 1. 数据库优化 在开发asp.net程序时,数据库访问是性能瓶颈之一。为提高程序性能,需要优化数据库设计和访问方式。具体可以从以下几个方面着手: 1.1 数据库设计优化 合理的数据库设计可以降低数据表冗余度,提高数据读写效率。具体可以优化以下几个方面: 表设计:合…

    C# 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部