2009-01-10 15 views
23

Je voudrais savoir s'il existe une classe .Net qui me permet 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 ci-dessous. Est-ce le meilleur que je peux obtenir ou devrais-je utiliser quelque chose d'autre? Managed WiFi (http://www.codeplex.com/managedwifi)Obtenir le SSID du réseau sans fil auquel je suis connecté avec C# .Net sous Windows Vista

La méthode qui exploite WMI fonctionne pour Windows XP, mais est-il ne fonctionne plus avec Windows Vista.

Répondre

22

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

Tout d'abord je devais créer un objet WlanClient

wlan = new WlanClient(); 

Et puis je peux obtenir la liste des SSID du 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))); 
     } 
+0

Cela ne fonctionne pas. Cela nécessite d'inclure un assemblage que je n'ai pas réussi à trouver! Pouvez-vous me montrer la bonne direction? – MrAsterisco

+4

@MrAsterisco: Vous avez besoin de la bibliothèque Managed WiFi (http://www.codeplex.com/managedwifi) mentionnée ci-dessus. – habakuk

2

On dirait que cela va faire 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

+1

Merci pour la réponse. Malheureusement, cette méthode ne fonctionne pas avec Windows Vista. Avez-vous une autre idée? – mariosangiorgio

0

Vous allez devoir utiliser l'API WLAN natif. Il y a une longue discussion à ce sujet here. Apparemment, c'est ce que l'API Managed Wifi utilise, donc il vous sera plus facile de l'utiliser si vous n'avez aucune restriction pour utiliser le code LGPL.

+0

C'est ce que j'ai fait. Il s'est révélé être facile. Merci pour votre réponse. – mariosangiorgio

-3

consulter le site http://wwww.daedaltech.com ils donnent une dll avec laquelle nous pouvons trouver t e SSID et adresse mac

+0

La page fournie n'existe pas –

2

Nous utilisions la bibliothèque wifi gérée, mais elle lançait des exceptions si le réseau était 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;