接続しているワイヤレス ネットワークの SSID を知ることができる .Net クラスがあるかどうかを知りたいです。これまでのところ、以下にリンクされているライブラリしか見つかりませんでした。私が得ることができる最高のものですか、それとも他のものを使用する必要がありますか? マネージド WiFi ( http://www.codeplex.com/managedwifi )
WMIを悪用する方法は Windows XP では機能しますが、Windows Vista では機能しなくなりました。
接続しているワイヤレス ネットワークの SSID を知ることができる .Net クラスがあるかどうかを知りたいです。これまでのところ、以下にリンクされているライブラリしか見つかりませんでした。私が得ることができる最高のものですか、それとも他のものを使用する必要がありますか? マネージド 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);
}
}
}
ネイティブの WLAN API を使用する必要があります。それについては、ここで長い議論があります。これは Managed Wifi API が使用するものらしいので、LGPL コードを使用するための制限がない場合は、より簡単に使用できます。