27

接続しているワイヤレス ネットワークの SSID を知ることができる .Net クラスがあるかどうかを知りたいです。これまでのところ、以下にリンクされているライブラリしか見つかりませんでした。私が得ることができる最高のものですか、それとも他のものを使用する必要がありますか? マネージド WiFi ( http://www.codeplex.com/managedwifi )

WMIを悪用する方法は Windows XP では機能しますが、Windows Vista では機能しなくなりました。

4

7 に答える 7

27

ライブラリを使用して解決しました。提供されたクラスを使用すると、非常に簡単に作業できるようになりました。

まず、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)));
}
于 2009-01-10T23:35:34.333 に答える
8

マネージド 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;
于 2014-08-23T09:37:12.893 に答える
3

これはあなたが望むことをするように見えます:

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);
        }
    }
}

http://bytes.com/groups/net-c/657473-wmi-wifi-discoveryから

于 2009-01-10T21:12:23.263 に答える
2

How do I get the available wifi APs and their signal strength in .net? に、さらに詳しい情報があります。

于 2009-02-02T21:46:52.563 に答える
0

ネイティブの WLAN API を使用する必要があります。それについては、ここで長い議論があります。これは Managed Wifi API が使用するものらしいので、LGPL コードを使用するための制限がない場合は、より簡単に使用できます。

于 2009-01-10T23:10:54.023 に答える