關閉Windows 系統當前串連的Wifi以及判斷物理\虛擬網卡,有線\無線網卡

來源:互聯網
上載者:User

標籤:open   net   img   tco   port   guid   out   ext   fun   

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;        }
View Code

5.後記

我用的是NativeWifi 類庫,進行開啟wifi的,NativeWifi 也是封裝了windows 的Wlanapi.dll 的方法。但是沒有關閉串連wifi方法,所以只能自己寫。

 

 文章參考:

有線網卡與無線網卡、物理網卡與虛擬網卡的區分

 

關閉Windows 系統當前串連的Wifi以及判斷物理\虛擬網卡,有線\無線網卡

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.