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.
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)));
}
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;
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);
}
}
}
il y a plus d'informations dans comment puis-je obtenir les AP WiFi disponibles et leur force de signal dans .NET?
(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);
}
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.
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.