wlanapi.dll

windows xp sp2 的wlanapi.dll的补丁下载地址:http://www.microsoft.com/downloads/en/details.aspx?FamilyID=52a43bab-dc4e-413f-ac71-158efd1ada50&DisplayLang=en

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NativeWifi;

namespace WiimoteTest
{


    class WifiManager
    {
        WlanClient client;
        Wlan.WlanAvailableNetwork[] networks;

        private string GetStringForSSID(Wlan.Dot11Ssid ssid)
        {
            return Encoding.ASCII.GetString(ssid.SSID, 0, (int)ssid.SSIDLength);
        }

        public WifiManager()
        {
            client = new WlanClient();
            foreach (WlanClient.WlanInterface wlanIface in client.Interfaces)
            {
                wlanIface.WlanConnectionNotification += wlanIface_WlanConnectionNotification;
                wlanIface.WlanNotification += wlanIface_WlanNotification;
            }
        }
        void wlanIface_WlanNotification(Wlan.WlanNotificationData notifyData)
        {
          
            //notification = notifyData.NotificationCode.ToString();
            //notchanged = true;
        }

        void wlanIface_WlanConnectionNotification(Wlan.WlanNotificationData notifyData, Wlan.WlanConnectionNotificationData connNotifyData)
        {
         
            //connnotification = notifyData.NotificationCode.ToString();
            //connnotchanged = true;
        }

        public string ConnectionStatus
        {
            get
            {
                string status = "";
              status =  client.Interfaces[0].CurrentConnection.isState.ToString();
              status += " Security:";
              status +=  (client.Interfaces[0].CurrentConnection.wlanSecurityAttributes.securityEnabled) ? "on" : "off";
              return status;
            }
        }

        public List<string> getAvailableNetworks(bool adhoc)
        {
            client.Interfaces[0].Scan();
            List<string> stringNetworks = new List<string>();
            //client.Interfaces[0].Scan();
            networks = client.Interfaces[0].GetAvailableNetworkList(0);

            foreach (Wlan.WlanAvailableNetwork network in networks)
            {
                if (network.dot11BssType == Wlan.Dot11BssType.Independent)
                {
                    string net = GetStringForSSID(network.dot11Ssid);
                    stringNetworks.Add(net);
                }
            }
            return stringNetworks;
        }

        private void btnScan_Click(object sender, EventArgs e)
        {
            client.Interfaces[0].Scan();
        }

        private string CurrentlyConnectedTo = "";
        public void Connect(string Name)
        {
            Wlan.Dot11Ssid ssid = (from net in networks
                                   where GetStringForSSID(net.dot11Ssid) == Name
                                   select net.dot11Ssid).FirstOrDefault();
            client.Interfaces[0].Connect(Wlan.WlanConnectionMode.DiscoveryUnsecure, Wlan.Dot11BssType.Independent, ssid,
                                         Wlan.WlanConnectionFlags.AdhocJoinOnly);

        }

        public void ConnectToSecure(string Name,string Password)
        {
            string profileName = Name; // this is also the SSID
            string mac = "";
            string key = Password;
            string authtype = "WPA2PSK";
            string enctype = "AES";
            string keytype = "passPhrase";


            string profileXml = string.Format("<?xml version=\"1.0\"?><WLANProfile xmlns=\"http://www.microsoft.com/networking/WLAN/profile/v1\"><name>{0}</name>
                                                            <SSIDConfig><SSID><name>{0}</name></SSID><nonBroadcast>false</nonBroadcast></SSIDConfig>
                                                             <connectionType>IBSS</connectionType><connectionMode>manual</connectionMode>
                                                          <MSM><security><authEncryption><authentication>{3}</authentication><encryption>{4}</encryption></authEncryption>
                                                          <sharedKey><keyType>{5}</keyType><protected>false</protected><keyMaterial>{2}</keyMaterial></sharedKey>
                                                          </security></MSM></WLANProfile>", profileName, mac, key, authtype, enctype, keytype);
            
            client.Interfaces[0].SetProfile(Wlan.WlanProfileFlags.AllUser, profileXml, true);

            client.Interfaces[0].Connect(Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Independent, Name);

        }

        public string InterfaceDescription
        {
            get
            {
                return client.Interfaces[0].InterfaceDescription;
            }
        }

        public void CreateUnsecureAndConnect(string Name)
        {
            string profileName = Name; // this is also the SSID
            string mac = "";
            string key = "playstation3";
            string authtype = "WPA2PSK";
            string enctype = "AES";
            string keytype = "passPhrase";

            string profileXml = string.Format("<?xml version=\"1.0\"?><WLANProfile xmlns=\"http://www.microsoft.com/networking/WLAN/profile/v1\"><name>{0}</name><SSIDConfig><SSID><name>{0}</name></SSID><nonBroadcast>false</nonBroadcast></SSIDConfig><connectionType>IBSS</connectionType><connectionMode>manual</connectionMode><MSM><security><authEncryption><authentication>{3}</authentication><encryption>{4}</encryption></authEncryption><sharedKey><keyType>{5}</keyType><protected>false</protected><keyMaterial>{2}</keyMaterial></sharedKey></security></MSM></WLANProfile>", profileName, mac, key, authtype, enctype, keytype);
            string openProfileXml = string.Format("<?xml version=\"1.0\"?><WLANProfile xmlns=\"http://www.microsoft.com/networking/WLAN/profile/v1\"><name>{0}</name><SSIDConfig><SSID><name>{0}</name></SSID><nonBroadcast>false</nonBroadcast></SSIDConfig><connectionType>IBSS</connectionType><connectionMode>manual</connectionMode><MSM><security><authEncryption><authentication>open</authentication><encryption>none</encryption><useOneX>false</useOneX></authEncryption></security></MSM></WLANProfile>", profileName,mac);
            client.Interfaces[0].SetProfile(Wlan.WlanProfileFlags.AllUser, openProfileXml, true);

            client.Interfaces[0].Connect(Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Independent, profileName);
            CurrentlyConnectedTo = profileName;

        }

        public void CreateSecureAndConnect(string Name,string password)
        {
            string profileName = Name; // this is also the SSID
            string mac = "";
            string key = password;
            string authtype = "WPA2PSK";
            string enctype = "AES";
            string keytype = "passPhrase";

            string profileXml = string.Format("<?xml version=\"1.0\"?><WLANProfile xmlns=\"http://www.microsoft.com/networking/WLAN/profile/v1\"><name>{0}</name><SSIDConfig><SSID><name>{0}</name></SSID><nonBroadcast>false</nonBroadcast></SSIDConfig><connectionType>IBSS</connectionType><connectionMode>manual</connectionMode><MSM><security><authEncryption><authentication>{3}</authentication><encryption>{4}</encryption></authEncryption><sharedKey><keyType>{5}</keyType><protected>false</protected><keyMaterial>{2}</keyMaterial></sharedKey></security></MSM></WLANProfile>", profileName, mac, key, authtype, enctype, keytype);

            client.Interfaces[0].SetProfile(Wlan.WlanProfileFlags.AllUser, profileXml, true);

            client.Interfaces[0].Connect(Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Independent, profileName);
            CurrentlyConnectedTo = profileName;
        }

        public void Disconnect()
        {
            client.Interfaces[0].Disconnect();
            if (CurrentlyConnectedTo != "")
            {
                client.Interfaces[0].DeleteProfile(CurrentlyConnectedTo);
                CurrentlyConnectedTo = "";
            }
        }


    }
}

posted @ 2011-03-30 11:36  董雨  阅读(1017)  评论(0编辑  收藏  举报