web-dev-qa-db-ja.com

Windows VistaでC#.Netを使用して接続しているワイヤレスネットワークのSSIDを取得する

接続しているワイヤレスネットワークのSSIDを知ることができる.Netクラスがあるかどうかを知りたいです。これまでのところ、以下にリンクされているライブラリのみが見つかりました。私が手に入れることができる最高のものですか、それとも他のものを使うべきですか? Managed WiFihttp://www.codeplex.com/managedwifi

悪用する方法 WMI Windows XP=で動作しますが、Windows Vistaでは動作しなくなりました。

24
mariosangiorgio

ライブラリを使用して解決しました。提供されたクラスでの作業は非常に簡単になりました:

まず、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)));
}
24
mariosangiorgio

マネージド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;
6
Byron Ross

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

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

3
ine
2
LDomagala

(クロスポスト 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);
}
1
Carl in 't Veld

他の回答で提案されているように、私はこれを正確に実行したいと思い、ManagedWifiを使用してみました。しかし、それは次のように解決できない例外につながりました: Managed WiFi(NativeWiFi API)の使用に関する問題

SimpleWiFi を使用するように切り替えることでこれを解決し、ManagedWifiパッケージを無視しました。

ソースコードを見ると、SWはMWの一部の機能の修正された再実装のようです。

0
Brondahl

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

0
Recep