Obtenir le SSID du réseau sans fil auquel je suis connecté avec C # .Net sous Windows Vista

StackOverflow https://stackoverflow.com/questions/431755

  •  08-07-2019
  •  | 
  •  

Question

J'aimerais savoir s'il existe une classe .Net qui me permette de connaître le SSID du réseau sans fil auquel je suis connecté. Jusqu'à présent, je n'ai trouvé que la bibliothèque liée ci-dessous. Est-ce que je peux obtenir le meilleur 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 sous Windows Vista.

Était-ce utile?

La solution

J'ai résolu d'utiliser la bibliothèque. Il s’est avéré très facile de travailler avec les cours fournis:

J'ai d'abord dû créer un objet WlanClient

wlan = new WlanClient();

Ensuite, je peux obtenir la liste des SSID auxquels 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)));
}

Autres conseils

Nous utilisions la bibliothèque wifi gérée, mais elle lève des exceptions si le réseau est déconnecté lors d'une requête.

Essayez:

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;

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

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

Vous devrez utiliser une API WLAN native. Il y a une longue discussion à ce sujet ici . C'est apparemment ce que l'API Managed Wifi utilise. Il vous sera donc plus facile de l'utiliser si vous n'avez aucune restriction quant à l'utilisation du code LGPL.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top