C#判斷是否存在已連接的真實網卡(NetConnectionStatus)

C#判斷是否存在已連接的真實網卡

這個問題可以拆成兩個小問題:

1、如何判斷一個網卡是否爲真實網卡(即物理網卡),因爲可能還有虛擬網卡,比如裝了某個虛擬機;
2、如何判斷一個網卡有沒有連接(連接不代表就能上Internet)。

注:這裏的網卡確切地應該叫網絡適配器(Network Adapter)。

用C#獲取硬件信息最方便的莫過於WMI了,與網卡相關的信息就在Win32_NetworkAdapter這個類裏面了。

第一個問題:在Win32_NetworkAdapter裏有個叫PNPDeviceID的字符串屬性,官方的說明是Windows Plug and Play device identifier of the logical device。如果這個屬性的前3個字符是PCI, 那麼這就是本機的真實網卡(不要問我爲什麼,我也想知道),包括無線網卡。

第二個問題:還是在Win32_NetworkAdapter裏有個名爲NetConnectionStatus的uint16類型的屬性,其中2代表已連接,7代表斷開。其他各值的含義請參見MSDN

OK,問題解決,最終的代碼爲:

ManagementObjectSearcher s = new ManagementObjectSearcher(
     @"SELECT DeviceID FROM Win32_NetworkAdapter WHERE NetConnectionStatus=2 AND PNPDeviceID LIKE 'PCI%'"); 
return s.Get().Count > 0; //True表示存在已連接的真實網卡,False反之。

記得添加using System.Management;和對System.Management.dll的引用。

-------------------------------------------------------------
  轉載出處:
  百度空間:http://hi.baidu.com/roovent
-------------------------------------------------------------

發佈了25 篇原創文章 · 獲贊 6 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章