我已閱讀了幾個來源。我跟着this接受的答案,並使用Managed WiFi API獲得SSID,如果我通過WiFi連接。這裏是我的代碼:檢查通過以太網C連接#
private void setSSID() {
WlanClient wlan = new WlanClient();
Collection<String> connectedSsids = new Collection<string>();
foreach (WlanClient.WlanInterface wlanInterface in wlan.Interfaces) {
Wlan.Dot11Ssid ssid = wlanInterface.CurrentConnection.wlanAssociationAttributes.dot11Ssid;
connectedSsids.Add(new String(Encoding.ASCII.GetChars(ssid.SSID, 0, (int)ssid.SSIDLength)));
}
}
如果我通過WiFi連接但是如果只通過以太網連接則會引發異常,這將完美地獲得SSID。理想的解決方案:
- 輸入
setSSID()
(或東西類似效果) - 檢查是否通過以太網
- 如果這樣連接,返回
null
/0
/undefined
- 否則,將SSID
(如果連網絡,我已經接受檢查)
我已經看遍了所有的WMI和NetworkInformation命名空間,但都沒有提供我在找什麼。
展望WlanApi.cs,異常被拋出在這裏:
public Wlan.WlanConnectionAttributes CurrentConnection {
get {
int valueSize;
IntPtr valuePtr;
Wlan.WlanOpcodeValueType opcodeValueType;
Wlan.ThrowIfError(
Wlan.WlanQueryInterface(client.clientHandle, info.interfaceGuid, Wlan.WlanIntfOpcode.CurrentConnection, IntPtr.Zero, out valueSize, out valuePtr, out opcodeValueType));
try {
return (Wlan.WlanConnectionAttributes)Marshal.PtrToStructure(valuePtr, typeof(Wlan.WlanConnectionAttributes));
}
finally {
Wlan.WlanFreeMemory(valuePtr);
}
}
}
又看了看:
拋出什麼異常?你能不能簡單地抓住這個例外,把它當作「沒有wifi可用」的條件?看起來原生API是[這裏](https://msdn.microsoft.com/en-us/library/windows/desktop/ms706274(v = vs.85).aspx)。如果你不喜歡處理庫中的異常,我想你可以編寫自己的包裝器,並直接處理。這個API可以讓你找到接口,枚舉每個接口上可用的網絡等等。由於你似乎能夠告訴你現有的代碼是否通過WiFi連接,所以你不清楚你在問什麼。 –
@PeterDuniho我沒有想到趕上例外。我的錯。它拋出了一個'Win32Exception',所以我抓住它並返回了必要的。郵政編碼作爲答案,我會接受:) – wmash
好的,做到了。 :) –