Back to Top

プログラムの覚書

Category: Managed Wifi

VB.NET WiFiの切断をする

無線LANの切断方法を記載します。

以下説明は、”Managed Wifi”を使用して行います。

実は現時点では、切断方法が無いので、ソースコードをダウンロードして切断のコードを追加してコンパイルする必要がある。Σ(・□・;)

ソースコードの修正にはC#を使用して修正する必要があります。のでその部分はC#による説明をします。

無線LAN切断メソッドの追加

1)ソースのダウンロード

・https://managedwifi.codeplex.com よりソースコードをダウンロード

2)ソースコードの編集

Interop.cs に追加

[DllImport("wlanapi.dll")]
public static extern int WlanDisconnect(
    [In] IntPtr clientHandle,
    [In, MarshalAs(UnmanagedType.LPStruct)] Guid interfaceGuid,
    IntPtr pReserved);

WlanApi.cs に追加

・WlanInterface() クラス内に遮断を記述する

public void Disconnect()
{
    Wlan.ThrowIfError(
        Wlan.WlanDisconnect(client.clientHandle, info.interfaceGuid, IntPtr.Zero));
}

3)コンパイル

コンパイルは、Visual Studio を使用してプロジェクトを読み込みコンパイルするだけです。

以上切断コードの追加方法です。https://github.com/jorgebv/windows-wifi-api/issues/5 に書かれています。

 

無線LANの切断をする

Dim targetInterface = "Wi-Fi"           'ワイヤレス ネットワーク接続"
Dim targetProfile = "XXXXXXXXXXXXX-2G"

Dim client As WlanClient = New WlanClient()

'インタフェースを取得する
Dim wlanIface = (From x In client.Interfaces() Where x.InterfaceName = targetInterface Select x).FirstOrDefault()
If wlanIface Is Nothing Then
    Return
End If

'プロファイルが存在するかチェックする
Dim profile = (From x In wlanIface.GetProfiles() Where x.profileName = targetProfile Select x.profileName).FirstOrDefault()
If profile Is Nothing Then
    Return
End If

'インタフェースの接続状態をチェック
If wlanIface.InterfaceState = Wlan.WlanInterfaceState.Connected Then
    'プロファイル名が接続中かチェック
    If wlanIface.CurrentConnection.profileName = targetProfile Then

        '接続切断(追加したメソッド)
        wlanIface.Disconnect()
    End If
End If

 

VB.NET WiFi接続プロファイルを削除する

無線LANの接続のプロファイルを削除する方法を記載します。

以下説明は、”Managed Wifi”を使用して行います。

プロファイルの削除

Imports NativeWifi


Dim targetInterface = "Wi-Fi"               'ワイヤレス ネットワーク接続";
Dim targetProfile = "XXXXXXXXXXXXX-2G"

Dim client As WlanClient = New WlanClient()

'インタフェースを取得する
Dim wlanIface = (From x In client.Interfaces() Where x.InterfaceName = targetInterface Select x).FirstOrDefault()
If wlanIface Is Nothing Then
    Return
End If

'プロファイルが存在するかチェックする
Dim profile = (From x In wlanIface.GetProfiles() Where x.profileName = targetProfile Select x.profileName).FirstOrDefault()
If profile Is Nothing Then
    Return
End If

'インタフェースの接続状態をチェック
If wlanIface.InterfaceState = Wlan.WlanInterfaceState.Connected Then
    'プロファイル名が接続中かチェック
    If wlanIface.CurrentConnection.profileName = targetProfile Then
        Return
    End If
End If

'プロファイルを削除する
wlanIface.DeleteProfile(targetProfile)

※プロファイルを削除する場合は、無線LAN接続を切断してから削除してください。

※プログラムの例は、同一PCに、同じレシーバーや同じルーターが無いものとして作成しています。