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

本文实例总结了C#实现启用与禁用本地网络的方式。分享给大家供大家参考,具体如下:

1) 使用Hnetcfg.dll

使用Add Reference,把Hnetcfg.dll导入到工程中,会生成3个引用,主要使用NETCONLib。

在工程中要using NETCONLib;

下面是实现的代码:

NetSharingManagerClass netSharingMgr = new NetSharingManagerClass();
INetSharingEveryConnectionCollection connections = netSharingMgr.EnumEveryConnection;
foreach (INetConnection connection in connections)
{
INetConnectionProps connProps = netSharingMgr.get_NetConnectionProps(connection);
if (connProps.MediaType == tagNETCON_MEDIATYPE.NCM_LAN)
{
connection.Disconnect(); //禁用网络
connection.Connect();  //启用网络
}
}

2) 使用Shell32.dll

shell32.dll是Windows壳Shell相关应用程序接口动态链接库文件,用于打开网页和文件。

使用Add Reference,把Shell32.dll导入到工程中。

在工程中要using Shell32;

下面是实现的代码:

const string discVerb = "停用(&B)";
const string connVerb = "启用(&A)";
Shell sh = new Shell32.Shell();
Folder folder;
Folder fd;
folder = sh.NameSpace(3);
foreach (FolderItem myItem in folder.Items())
{
if (myItem.Name == "网络连接")
{
fd = (Folder)myItem.GetFolder;
//禁用网络
foreach (FolderItem fi in fd.Items())
{
foreach (FolderItemVerb Fib in fi.Verbs())
{
if (Fib.Name == discVerb)
{
Fib.DoIt();
break;
}
}
Thread.Sleep(3000);
foreach (FolderItemVerb Fib in fi.Verbs())
{
//启用网络
if (Fib.Name == connVerb)
{
Fib.DoIt();
break;
}
}
}
}
}

3) 使用setupapi.dll

setupapi.dll是流行的安装程序支持相关文件

setupapi.dll不能象前面两个通过Add Reference导入到工程中,只能使用DllImport

代码比较多,贴主要代码

[DllImport("setupapi.dll")]
public static extern IntPtr
SetupDiGetClassDevsA(ref Guid ClassGuid, UInt32 Enumerator,
IntPtr hwndParent, UInt32 Flags);
[DllImport("setupapi.dll")]
public static extern IntPtr
SetupDiGetClassDevs(UInt32 ClassGuid, String e, IntPtr hwndParent, UInt32 Flags);
[DllImport("setupapi.dll")]
static extern Boolean
SetupDiEnumDeviceInfo(IntPtr DeviceInfoSet, UInt32 MemberIndex,
ref SP_DEVINFO_DATA DeviceInfoData);
…………
uint NewNetStatus = 0;
if (newStatus)
NewNetStatus = DICS_ENABLE;
else
   NewNetStatus = DICS_DISABLE;
IntPtr NewDeviceInfoSet;
SP_DEVINFO_DATA spData = new SP_DEVINFO_DATA();
spData.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(spData);
UInt32 RequiredSize = 0;
byte[] st1 = new byte[1024];
uint Data = 0;
NewDeviceInfoSet = SetupDiGetClassDevs(0, "PCI", IntPtr.Zero, DIGCF_PRESENT | DIGCF_ALLCLASSES);
bool bFound = false;
for (uint i = 0; SetupDiEnumDeviceInfo(NewDeviceInfoSet, i, ref spData); i++)
{
while (!SetupDiGetDeviceRegistryProperty(NewDeviceInfoSet, ref spData, SPDRP_HARDWAREID, ref Data, st1, 1024, ref RequiredSize))
{
}
string str = System.Text.Encoding.ASCII.GetString(st1); ;
char[] a ={ '/0' };
string[] strSPlit = str.Split(a, StringSplitOptions.RemoveEmptyEntries);
string HardId = @"PCI/VEN_10EC&DEV_8029&SUBSYS_00000000";
for (uint j = 0; j < strSPlit.Length; j++)
{
if (strSPlit[j] == HardId)
{
bFound = true;
break;
}
}
   if (bFound)
   break;
}
SP_PROPCHANGE_PARAMS spPropChangeParam = new SP_PROPCHANGE_PARAMS();
spPropChangeParam.Scope = DICS_FLAG_GLOBAL;
spPropChangeParam.StateChange = NewNetStatus;
spPropChangeParam.ClassInstallHeader.cbSize = (UInt32)System.Runtime.InteropServices.Marshal.SizeOf(spPropChangeParam.ClassInstallHeader);
spPropChangeParam.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
SetupDiSetClassInstallParams(NewDeviceInfoSet, ref spData, ref spPropChangeParam.ClassInstallHeader, System.Runtime.InteropServices.Marshal.SizeOf(spPropChangeParam));
SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, NewDeviceInfoSet, ref spData);
SetupDiDestroyDeviceInfoList(NewDeviceInfoSet);

更多关于C#相关内容感兴趣的读者可查看本站专题:《C#窗体操作技巧汇总》、《C#常见控件用法教程》、《WinForm控件用法总结》、《C#程序设计之线程使用技巧总结》、《C#操作Excel技巧总结》、《C#中XML文件操作技巧汇总》、《C#数据结构与算法教程》、《C#数组操作技巧总结》及《C#面向对象程序设计入门教程》

希望本文所述对大家C#程序设计有所帮助。

(0)

相关推荐

  • c#判断网络连接状态的示例分享

    复制代码 代码如下: public partial class Form1 : Form { [DllImport("wininet.dll")] private extern static bool getInterState(out int conn, int val); public Form1()  {InitializeComponent();  getNet(); } //判断当前是否连接入Internet网络private void getNet(){int Out;if

  • c#网络唤醒功能实现

    网络唤醒实现了对网络的集中管理,即在任何时刻,网管中心的IT管理人员可以经由网络远程唤醒一台处于休眠或关机状态的计算机.使用这一功能,IT管理人员可以在下班后,网络流量最小以及企业的正常运作最不受影响的时候完成所有操作系统及应用软件的升级及其他管理任务. 为了唤醒网络上的计算机,用户必须发出一种数据包,该数据包的格式与普通数据包不同,而且还必须使用相应的专用软件才能产生.当前比较普遍采用的是AMD公司制作的Magic Packet,这套软件可以生成网络唤醒所需要的特殊数据包.该数据包包含有连续6

  • c#判断网络连接状态

    运行效果 复制代码 代码如下: using System;using System.Collections.Generic;using System.Text;using System.Net.NetworkInformation; namespace ConsoleApplication1{    class Program    {        public static void Main(string[] args)        {            string url = "

  • C#设置本地网络如DNS、网关、子网掩码、IP等等

    如今网络在我们的生活工作中所起的作用越来越大,可以说离开了网络我们就无法正常的工作和生活.作为程序员我们写的程序大多数也会跟网络相关,而想要使用网络首先要将机器的网络配置设置好.而手动设置的方法显然很不可取,所以我们要让程序帮我们完成.下面是一个很常用的C#设置系统各种网络参数的一个小Demo一起看看吧. 这个Demo是通过"Win32_NetworkAdapterConfiguration"这个管理类.这里面已基本包括了IP,DNS,网关的设置信息. 在C#中使用WMI还是比较简单的

  • C#同步网络时间的方法实例详解

    本文实例讲述了C#同步网络时间的方法.分享给大家供大家参考.具体分析如下: 客户的机器的系统时间经常出错,导致给他们做的软件无法正常使用,所以后来就加了一个同步网络时间的小功能.实现起来很简单,但是却很使用. 这个小功能就是先获取网络时间,然后将系统的时间修改成从网络获得的时间.下面是具体的实现: 获取网络时间: using System; using System.Collections.Generic; using System.Linq; using System.Text; using

  • c#多线程网络聊天程序代码分享(服务器端和客户端)

    XuLIeHua类库 复制代码 代码如下: using System;using System.Collections;  using System.Collections.Generic;using System.Threading;  using System.Runtime.Serialization;using System.Runtime.Serialization.Formatters.Binary;using System.Text;using System.IO;using Sy

  • C#网络编程基础之进程和线程详解

    在C#的网络编程中,进程和线程是必备的基础知识,同时也是一个重点,所以我们要好好的掌握一下. 一:概念 首先我们要知道什么是"进程",什么是"线程",好,查一下baike. 进程:是一个具有一定独立功能的程序关于某个数据集合的一次活动.它是操作系统动态执行的基本单元, 在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元. 线程:是"进程"中某个单一顺序的控制流. 关于这两个概念,大家稍微有个印象就行了,防止以后被面试官问到. 二:进程

  • C#实现从网络同步标准北京时间的方法

    本文实例讲述了C#实现从网络同步标准北京时间的方法.分享给大家供大家参考.具体分析如下: 这段C#代码可以从http://www.time.ac.cn网站上获取标准的北京时间,只需简单的组合即可让本地服务器实时同步正确的北京时间 #region /// <summary> /// 获取标准北京时间 /// /// </summary> /// /// <returns></returns> /// public static DateTime GetStan

  • C#中判断本地系统的网络连接状态的方法

    函数InternetGetConnectedState返回本地系统的网络连接状态. 语法: BOOL InternetGetConnectedState( __out LPDWORD lpdwFlags, __in DWORD dwReserved ); 参数: lpdwFlags[out] 指向一个变量,该变量接收连接描述内容.该参数在函数返回FLASE时仍可以返回一个有效的标记.该参数可以为下列值的一个或多个. 值 含义 INTERNET_CONNECTION_CONFIGURED0x40

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

    本文实例总结了C#实现启用与禁用本地网络的方式.分享给大家供大家参考,具体如下: 1) 使用Hnetcfg.dll 使用Add Reference,把Hnetcfg.dll导入到工程中,会生成3个引用,主要使用NETCONLib. 在工程中要using NETCONLib; 下面是实现的代码: NetSharingManagerClass netSharingMgr = new NetSharingManagerClass(); INetSharingEveryConnectionCollect

  • android 网络编程之网络通信几种方式实例分享

    如今,手机应用渗透到各行各业,数量难以计数,其中大多数应用都会使用到网络,与服务器的交互势不可挡,那么android当中访问网络有哪些方式呢? 现在总结了六种方式: (1)针对TCP/IP的Socket.ServerSocket (2)针对UDP的DatagramSocket.DatagramPackage.这里需要注意的是,考虑到Android设备通常是手持终端,IP都是随着上网进行分配的.不是固定的.因此开发也是有一点与普通互联网应用有所差异的. (3)针对直接URL的HttpURLConn

  • Nodejs读取本地json文件,输出json数据接口方式

    目录 Nodejs读取本地json文件,输出json数据接口 第一步:准备本地JSON文件 第二步:编写nodejs服务程序 第三步: 测试请求接口数据 nodejs读取本地json文件中文乱码 第一种方式 第二种方式 Nodejs读取本地json文件,输出json数据接口 第一步:准备本地JSON文件 F:\nodejs\data\test.json {     "code": 0,     "msg": "请求成功",     "d

  • Linux 为特定的用户或用户组启用或禁用 SSH的方法

    由于你的公司标准规定,你可能只能允许部分人访问 Linux 系统.或者你可能只能够允许几个用户组中的用户访问 Linux 系统.那么如何实现这样的要求呢?最好的方法是什么呢?如何使用一个简单的方法去实现呢? 是的,我们会有很多种方法去实现它.但是我们应该使用简单轻松的方法.为了简单轻松的完成目的,我们可以通过对 /etc/ssh/sshd_config 文件做必要的修改来实现.在这篇文章中我们将会向你展示实现要求的详细步骤. 为什么我们要这样做呢?是出于安全的原因.你可以访问这个链接来获取更多关

  • 使用 chkconfig 和 systemctl 命令启用或禁用 Linux 服务的方法

    对于 Linux 管理员来说这是一个重要(美妙)的话题,所以每个人都必须知道,并练习怎样才能更高效的使用它们. 在 Linux 中,无论何时当你安装任何带有服务和守护进程的包,系统默认会把这些服务的初始化及 systemd 脚本添加进去,不过此时它们并没有被启用. 我们需要手动的开启或者关闭那些服务.Linux 中有三个著名的且一直在被使用的初始化系统. 什么是初始化系统? 在以 Linux/Unix 为基础的操作系统上,init (初始化的简称) 是内核引导系统启动过程中第一个启动的进程. i

  • python 修改本地网络配置的方法

    本文主要说一下怎么使用Python来修改本地的ip和dns等,因为有本地的ip和dns都是随机获取的,有些时候不是很方便,需要修改,我就稍微的封装了一下,但是随机ip和网关.子网掩码等我都没有设置为参数,因为经常用也懒得改了,可以自己去修改一下. 测试的时候,在win8.1上面需要用管理员身份才能执行,win7似乎是不需要管理员身份的. 使用的Python库是WMI,这个是默认安装了的.如果没有去网上下载即可. 该说的都在注释里,就直接上代码了. # -*- coding: utf-8 -*-

  • 浅谈关于如何检测iOS14本地网络权限的一些思路

    前戏 苹果iOS 14针对本地局域做了一些权限限制,详情见链接:https://developer.apple.com/videos/play/wwdc2020/10110/ wwdc翻译过来凑字数的 什么是本地网络? 这里的本地网络其实就是我们常说的局域网,是将设备接入路由器以后形成的网络,设备可以通过这张网络互相通信,如我们的设备发现.设备绑定.局域网优先等功能都是使用的本地网络. 从 iOS 13 开始,应用想要获得当前连接到的 Wi-Fi 名称,那就必须要获得定位权限.因为通过识别 Wi

  • C#获取本地IP的四种方式示例详解

    1.第一种方式 采用System.Net.Dns的GetHostAddress的方式,具体请看代码: /// <summary> /// 网络不通畅可以获取 /// 不过能获取到具体的IP /// </summary> /// <returns></returns> public static List<IPAddress> GetByGetHostAddresses() { try { IPAddress[] adds = Dns.GetHos

  • phpstudy中mysql无法启动(与本地安装的mysql冲突)的解决方式

    目录 一.解决问题: 二.产生原因: 三.解决办法 总结 一.解决问题: 1.点击phpmysql中的mysql无法启动,显示正在启动后立即停止 二.产生原因: 本地新安装了mysql,与phpstudy中MySQL冲突. 三.解决办法 1.使用Win+R调出运行命令,在输入框中输入services.msc后,再按回车键,打开系统服务项目列表窗口. 2.在列表窗口中,找到mysql服务,停止该服务. 3.重新启动phpstudy中的mysql即可. 如果没还好,就卸载本地mysql,方法如下:

  • Android判断设备网络连接状态及判断连接方式的方法

    本文实例讲述了Android判断设备网络连接状态及判断连接方式的方法.分享给大家供大家参考,具体如下: 在Android开发过程中,对于一个需要连接网络的Android设备,对设备的网络状态检测是很有必要的!有很多的App都需要连接网络.判断设备是否已经连接网络,并且在连接网络的状态下判断是wifi无线连接还是GPRS手机网络连接,这样就可以在不同的网络连接下去调用不同的方法,处理不同的事情.这些功能都写在了下面的代码中了!请看主要代码如下: /** * 检测网络是否连接 * @return *

随机推荐