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技术站