关闭Windows 系统当前连接的Wifi以及判断物理\虚拟网卡,有线\无线网卡

1.关闭wifi ,调用Api

 [DllImport("Wlanapi.dll", SetLastError = true)]
 public static extern uint WlanDisconnect(IntPtr hClientHandle, ref Guid pInterfaceGuid, IntPtr pReserved);

2.获取当前连接wifi 网卡句柄

The WlanOpenHandle function opens a connection to the server.

就是为了返回 ClientHandle ,传入WlanDisconnect(...) 中的hClientHandle 的参数。

官方解释【A handle for the client to use in this session. This handle is used by other functions throughout the session.】

 [DllImport("Wlanapi.dll")]
 private static extern int WlanOpenHandle(uint dwClientVersion, IntPtr pReserved,  [Out]out uint pdwNegotiatedVersion, out IntPtr ClientHandle);

3.WlanDisconnect(...)中还有一个参数pInterfaceGuid要获取,就是真实网卡(安装了虚拟机要虚拟网卡)的唯一标识符,无线和有线还不一样。

3.1 真实网卡可以通过Win32_NetworkAdapter(可以查询此类的属性,其中有【GUID】) 获取,因为真实网卡的 PNPDeviceID  都是【PCI】开头

SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionStatus=2  AND PNPDeviceID LIKE ‘PCI%‘");

以上 获取了已连接的真实网卡,笔记本一般有无线和有线网卡,如果无线和有线都连接,获取了两条记录,NetConnectionStatus 条件是连接状态 【2】:已连接,【7】:未连接。

3.2通过Win32_NetworkAdapter我们可以获取 真实网卡的唯一标识符 GUID. 区别有线还是无线,我们可以通过注册表判断注册表路径:HKLM\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\【GUID】\Connection

路径下的键值 MediaSubType,如果Value=2,表示无线网卡。

4. 最终形成

 public static bool Disconnect()
        {
            IntPtr _clientHandle = IntPtr.Zero;
            uint negotiatedVersion;
            int code = WlanOpenHandle(1, IntPtr.Zero, out negotiatedVersion, out _clientHandle);
            NetworkInterface[] _interface = NetworkInterface.GetAllNetworkInterfaces();
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(
            @"SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionStatus=2  AND PNPDeviceID LIKE ‘PCI%‘");
            string GUID = "";
            foreach (ManagementObject mo in searcher.Get())
            {
                GUID = mo["GUID"].ToString().Trim();
                Console.WriteLine(GUID);
                var registryKey = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\" + GUID + "\\Connection", false);
                if (registryKey != null)
                {
                    var mediaSubTypevalue = registryKey.GetValue("MediaSubType");
                    if (mediaSubTypevalue != null)
                    {
                        int num;
                        int.TryParse(mediaSubTypevalue.ToString(), out num);
                        if (num == 2)
                        {
                            Guid netIfaceGuid = new Guid(GUID);
                            var ERROR_SUCCESS = WlanDisconnect(_clientHandle, ref netIfaceGuid, IntPtr.Zero);
                            if (ERROR_SUCCESS == 0)
                            {
                                return true;
                            }
                            WlanCloseHandle(_clientHandle, IntPtr.Zero);//不确定
                        }
                    }
                }
            }
            return false;
        }

5.后记

我用的是NativeWifi 类库,进行打开wifi的,NativeWifi 也是封装了windows 的Wlanapi.dll 的方法。但是没有关闭连接wifi方法,所以只能自己写。

文章参考:

有线网卡与无线网卡、物理网卡与虚拟网卡的区分

原文地址:https://www.cnblogs.com/aguan/p/8945136.html

时间: 2024-08-29 23:05:21

关闭Windows 系统当前连接的Wifi以及判断物理\虚拟网卡,有线\无线网卡的相关文章

关闭windows系统的危险端口,命令行

netsh advfirewall firewall add rule name=denyDangerTCPPort dir=in protocol=tcp localport=135,137-139,445 action=block netsh advfirewall firewall add rule name=denyDangerUDPPort dir=in protocol=udp localport=135,137-139,445 action=block 原文地址:https://w

删除windows系统中以前的设备(比如以前的网卡)或驱动的方法

1.在“开始”菜单单击“运行”,然后在“运行”对话框中输入“CMD”命令打开命令提示符窗口:2.在提示符窗口中输入“Set devmgr_show_nonpresent_devices=1”并回车:3.在提示符窗口中输入“Start devmgmt.msc”并回车,即可打开“设备管理器”,接着在“设备管理器”的菜单栏上选择“查看-显示隐藏设备”,这样就能看到所有的隐藏硬件

本地Windows远程桌面连接阿里云Ubuntu服务器

本地Windows远程桌面连接阿里云Ubuntu 16.04服务器: 1.目的:希望通过本地的Windows远程桌面连接到阿里云的Ubuntu服务器,通过远程桌面图形界面的方式操作服务器. 2.条件:申请的阿里云Ubuntu服务器一台,本地Windows操作系统电脑一台. 3.如何远程桌面连接: (1)首先通过Windows系统下连接Linux系统的命令行工具连接Ubuntu服务器,(工具:xshell,securecrt,putty等). (2)通过Windows下工具连接到linux操作系统

Android 监听 Android中监听系统网络连接打开或者关闭的实现代码

本篇文章对Android中监听系统网络连接打开或者关闭的实现用实例进行了介绍.需要的朋友参考下 很简单,所以直接看代码 复制代码 代码如下: package xxx; import android.content.BroadcastReceiver;  import android.content.Context;  import android.content.Intent;  import android.net.ConnectivityManager;  import android.ne

如何在Windows系统上利用Telnet协议连接Linux服务器

Telnet协议是Internet远程登录服务的标准协议,它为用户提供了在本地计算机上完成远程主机工作的能力.很多终端使用者都习惯在计算机上利用Telnet会话来远程控制服务器.这里小编就分两步为大家演示如何在Windows系统上利用Telnet协议连接Linux服务器. 步骤一:在Windows系统上打开Telnet功能:  步骤二:在Linux系统上启用Telnet服务. 步骤一:Windows终端开启Telnet功能 1/由于在Windows Vista之后的版本默认并没有提供Telnet

(超实用)快速查看所有windows 系统 WiFi密码

写在前面: 因身边朋友反映,我写的博客都看不懂,所以,我写一点关于windows 系统的文章,希望能帮到大家! 需求: 在生活中,大多数人经常会忘记自己的无线密码,当有人问密码时,只知道自己电脑能连接,却说不出来密码,这里我整理出了多种windows 系统的无线密码查看方法,请往下看! windows 10 系统 方法一(推荐): 1.鼠标移动到右下角无线图标处,右击选择"打开网络和Internet设置"2.单击左侧WLAN图标,再单击网络和共享中心 3.单击右侧无线网名 4.单击&q

Android代码连接Wifi时被系统切换到其他Wifi的问题

首先说下Android代码连接Wifi的几个步骤:(以下涉及到具体API函数自查哈,写的时候凭借印象大致写了下) 转载请注明出处: 胖虎:http://blog.csdn.net/ljphhj 1.首先要开启Wifi连接开关,mWifiManager.setWifiEnabled(true) 2.通过获取List<ScanResult>来获取到Wifi连接列表.(mWifiManager.getScanResults) 3.获取List<WifiConfiguration>列表.(

Windows系统中Xshell与Linux连接时遇到的问题

前提条件:在Windows系统中已经安装了Xshell,并且安装了虚拟机软件和Linux系统 步骤1.在Linux系统中root用户下,使用ifconfig命令查看虚拟系统Linux的IP地址.如图1 图1 步骤2.打开Xshell,创建连接,在新建会话属性对话框中,登记连接的名字,选择使用的协议,以及需要连接的虚拟机IP地址.如图2 图2 当连接建立好,只需根据提示输入用户名和密码就可以在Xshell终端使用Linux系统. 下面讨论当连接不能连接时,需要在哪许方面找原因: 原因1:虚拟机网络

删掉windows系统记住的WIFI密码

cmd下面运行 netsh wlan delete profile name=* i=* 删掉windows系统记住的WIFI密码,布布扣,bubuko.com