web-dev-qa-db-fra.com

Obtenez SSID du réseau sans fil que je suis connecté à C # .NET sur Windows Vista

J'aimerais savoir s'il y a une classe .NET qui me permet de connaître le SSID du réseau sans fil, je suis connecté à. Jusqu'à présent, je n'ai trouvé que la bibliothèque ci-dessous. Est le meilleur que je puisse obtenir ou devrais-je utiliser autre chose? WiFi géré ( http://www.codeplex.com/managedwifi )

La méthode qui exploite WMI Fonctionne pour Windows XP mais ne fonctionne plus avec Windows Vista.

24
mariosangiorgio

J'ai résolu à l'aide de la bibliothèque. Il a résulté d'être assez facile à travailler avec les classes fournies:

D'abord, j'ai dû créer un objet wlanclient

wlan = new WlanClient();

Et puis je peux obtenir la liste des SSIDS que le PC est connecté avec ce code:

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

Nous utilisions la bibliothèque WiFi gérée, mais il jette des exceptions si le réseau est déconnecté lors d'une requête.

Essayer:

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

On dirait que cela fera ce que vous voulez:

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

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

3
ine
2
LDomagala

(In- - Comment obtenir actuellement la connexion WiFi SSID en C # à l'aide de WMI ou de System.net.NetworkInformation Windows 10? ) ==) ==) ==) ==) ==)

J'ai trouvé une bibliothèque plutôt ancienne datant de 2014:

Microsoft.WindowsAPICodePack-Core version 1.1.0.2

Bien que ce ne soit pas conforme à la norme .NET, cette bibliothèque s'intègre à mon application .NET CORE 3.0, mais n'est évidemment pas une plate-forme multiples.

Exemple de code:

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

Je voulais faire exactement cela et essayé d'utiliser Gestiondwifi, comme suggéré dans d'autres réponses. Mais cela a conduit à des exceptions non impesseres conformément à: Problèmes liés à l'utilisation de WiFi géré (API NativeWIFI)

J'ai résolu ceci en passant à l'aide de simplewifi entièrement et ignoré le paquet géré.

En regardant au code source, il ressemble à SW est une réimplémentation fixe de certaines des fonctionnalités de MW.

0
Brondahl

Vous allez devoir utiliser API natif de WLAN. Il y a une longue discussion à ce sujet ici . Apparemment, c'est ce que l'utilisation de l'API WiFi gérée, il vous sera donc plus facile de l'utiliser si vous n'avez aucune restriction pour utiliser le code LGPL.

0
Recep