接続しているワイヤレスネットワークのSSIDを知ることができる.Netクラスがあるかどうかを知りたいです。これまでのところ、以下にリンクされているライブラリのみが見つかりました。私が手に入れることができる最高のものですか、それとも他のものを使うべきですか? Managed WiFi ( http://www.codeplex.com/managedwifi )
悪用する方法 WMI Windows XP=で動作しますが、Windows Vistaでは動作しなくなりました。
ライブラリを使用して解決しました。提供されたクラスでの作業は非常に簡単になりました:
まず、WlanClientオブジェクトを作成する必要がありました
wlan = new WlanClient();
そして、PCが接続されているSSIDのリストを次のコードで取得できます。
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ライブラリを使用していましたが、クエリ中にネットワークが切断されると例外がスローされます。
試してください:
var process = new Process
{
StartInfo =
{
FileName = "netsh.exe",
Arguments = "wlan show interfaces",
UseShellExecute = false,
RedirectStandardOutput = true,
CreateNoWindow = true
}
};
process.Start();
var output = process.StandardOutput.ReadToEnd();
var line = output.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).FirstOrDefault(l => l.Contains("SSID") && !l.Contains("BSSID"));
if (line == null)
{
return string.Empty;
}
var ssid = line.Split(new[] { ":" }, StringSplitOptions.RemoveEmptyEntries)[1].TrimStart();
return ssid;
これはあなたが望むことをするように見えます:
ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\WMI",
"SELECT * FROM MSNdis_80211_ServiceSetIdentifier");
foreach (ManagementObject queryObj in searcher.Get())
{
Console.WriteLine("-----------------------------------");
Console.WriteLine("MSNdis_80211_ServiceSetIdentifier instance");
Console.WriteLine("-----------------------------------");
if(queryObj["Ndis80211SsId"] == null)
Console.WriteLine("Ndis80211SsId: {0}",queryObj["Ndis80211SsId"]);
else
{
Byte[] arrNdis80211SsId = (Byte[])
(queryObj["Ndis80211SsId"]);
foreach (Byte arrValue in arrNdis80211SsId)
{
Console.WriteLine("Ndis80211SsId: {0}", arrValue);
}
}
}
(クロスポスト WMIまたはSystem.Net.NetworkInformation windows 10を使用してc#で現在接続されているwifi SSIDを取得する方法 )
2014年までさかのぼるかなり古いライブラリを見つけました。
Microsoft.WindowsAPICodePack-Core version 1.1.0.2
.NET標準に準拠していませんが、このライブラリは.NET Core 3.0アプリと統合されていますが、クロスプラットフォームではありません。
サンプルコード:
var networks = NetworkListManager.GetNetworks(NetworkConnectivityLevels.Connected);
foreach (var network in networks) {
sConnected = ((network.IsConnected == true) ? " (connected)" : " (disconnected)");
Console.WriteLine("Network : " + network.Name + " - Category : " + network.Category.ToString() + sConnected);
}
他の回答で提案されているように、私はこれを正確に実行したいと思い、ManagedWifiを使用してみました。しかし、それは次のように解決できない例外につながりました: Managed WiFi(NativeWiFi API)の使用に関する問題
SimpleWiFi を使用するように切り替えることでこれを解決し、ManagedWifiパッケージを無視しました。
ソースコードを見ると、SWはMWの一部の機能の修正された再実装のようです。
ネイティブWLAN APIを使用する必要があります。それについては長い議論があります here 。どうやらこれはManaged Wifi APIが使用するものであるため、LGPLコードを使用するための制限がない場合は、より使いやすくなります。