理解を深めるために、プロジェクトを条件付きで2つの部分に分割します。
最初に、Visual StudioでC#-WindowsFormsApplicationのプロジェクトを作成し、名前を付けます。最も気に入っているので、「Wifi」と呼びます。
パート1:利用可能なネットワークを見つける
したがって、2つのコントローラーをフォームにスローします。
- ListView-listNetに名前を付けて、わかりやすくするために4つの列を追加します。
- ボタン-btnRefreshを呼び出す
必要なのはこれだけです。私のウィンドウは次のようになります。
その後、プロジェクトに2つの新しいファイルを追加します。これはネイティブWifiライブラリです。インターネット上のどこかで見つけました。
ソースはここで取得できます
必要な名前空間を宣言します
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using NativeWifi;
ボタンのクリックを処理するプロシージャを作成し、そこにこのコードを追加します。
WlanClient client = new WlanClient(); foreach (WlanClient.WlanInterface wlanIface in client.Interfaces) { Wlan.WlanAvailableNetwork[] wlanBssEntries = wlanIface.GetAvailableNetworkList( 0 ); // , istNet.Items.Clear(); foreach (Wlan.WlanAvailableNetwork network in wlanBssEntries) { // ListViewItem listItemWiFi = new ListViewItem(); // , - Trim((char)0) listItemWiFi.Text = System.Text.ASCIIEncoding.ASCII.GetString(network.dot11Ssid.SSID).Trim((char)0); // , . listItemWiFi.SubItems.Add(network.wlanSignalQuality.ToString() + "%"); // listItemWiFi.SubItems.Add(network.dot11DefaultAuthAlgorithm.ToString().Trim((char)0)); // listItemWiFi.SubItems.Add(network.dot11DefaultCipherAlgorithm.ToString().Trim((char)0)); // // listNet.Items.Add(listItemWiFi); } }
これで、アプリケーションを実行して、必要なすべてのネットワークが見つかったことを確認できます。次のようになります。私のように見えます。右側の暗いバーは、Windows 8でネットワークに接続するためのフィールドです。
パート2:接続
そして、最も簡単な方法で完了です。 ここで、必要なネットワークに接続する必要があります。ネットワークに接続する例を考えます。これはプログラムのリストの最初です。
別のボタンを作成し、このコードをそこに追加します。
try { WlanClient client = new WlanClient(); foreach (WlanClient.WlanInterface wlanIface in client.Interfaces) { Wlan.WlanAvailableNetwork[] wlanBssEntries = wlanIface.GetAvailableNetworkList(0); foreach (Wlan.WlanAvailableNetwork network in wlanBssEntries) { String profileName = System.Text.ASCIIEncoding.ASCII.GetString(network.dot11Ssid.SSID).Trim((char)0); // if (listNet.SelectedItems[0].Text.Equals(profileName)) { String strTemplate=""; String authentication=""; switch ((int)network.dot11DefaultAuthAlgorithm) { case 1: // Open break; case 3: // WEP break; case 4: // WPA_PSK strTemplate = Properties.Resources.WPAPSK; authentication = "WPAPSK"; String encryption = network.dot11DefaultCipherAlgorithm.ToString().Trim((char)0); // String key = "0000000000"; String profileXml = String.Format(strTemplate, profileName, authentication, encryption, key); wlanIface.SetProfile(Wlan.WlanProfileFlags.AllUser, profileXml, true); wlanIface.Connect(Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Any, profileName); break; default: break; } } } } } catch (Exception ex) { MessageBox.Show(ex.Message); }
最も重要なこと、この行のみを説明します。
String profileXml = String.Format(strTemplate, profileName, authentication, encryption, key);
ここで、接続用のプロファイルを作成します。テンプレート(strTemplate)は次のようになります。
<?xml version="1.0"?> <WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1"> <name>{0}</name> <SSIDConfig> <SSID> <name>{0}</name> </SSID> </SSIDConfig> <connectionType>ESS</connectionType> <connectionMode>manual</connectionMode> <MSM> <security> <authEncryption> <authentication>{1}</authentication> <encryption>{2}</encryption> <useOneX>false</useOneX> </authEncryption> <sharedKey> <keyType>passPhrase</keyType> <protected>false</protected> <keyMaterial>{3}</keyMaterial> </sharedKey> </security> </MSM> </WLANProfile>
私が持っているネットワークを前もって知っているので、私はそれを選んだ。 さまざまなオプションの詳細については、こちらをご覧ください。
http://msdn.microsoft.com/en-US/library/windows/desktop/aa369853(v=vs.85).aspx
簡単に言えば、XMLドキュメントに既知のデータ(ネットワークキー)と以前に見つかったデータ(名前、セキュリティ、暗号化)を入力し、プロファイルを追加して接続します。
プロジェクトを開始し、ネットワークのリストを更新し、ネットワークを選択して接続します。
この例は確かに普遍的ではありませんが、ネットワークが使用する暗号化をチェックし、プロファイルに必要なテンプレートを選択することを妨げるものです。
このリンクから Visual Studio 2012のプロジェクトをダウンロードできます。
ご清聴ありがとうございました。