透過背景程式來強制 Windows 連線到指定 Wifi
每一個 Wifi 會有連線的設定(包含密碼以及加密格式)記錄在 Windows 中 Profile
所以透過要透過程式連線至 Wifi 需要先建立 Profile
Profile 為 XML 格式,可以直接透過 Windows PowerShell 匯出設定

// 列出 Profile 清單
netsh wlan show profiles

// 輸出指定 Profile 至指定目錄
netsh wlan export profile name="ProfileName" folder="C:\ExportPath" key=clear

這裡使用 ManagedNativeWifi 套件方便操作: https://github.com/emoacht/ManagedNativeWifi
可以直接透過 Nuget 安裝

using ManagedNativeWifi;

await NativeWifi.ScanNetworksAsync(timeout: TimeSpan.FromSeconds(10));
var profile = ResourceExecute.ReadResource("profile.xml");

List<Guid> interfaceInfos = new();
foreach (var interfaceInfo in NativeWifi.EnumerateInterfaces())
    interfaceInfos.Add(interfaceInfo.Id);

foreach (var interfaceId in interfaceInfos)
{
    NativeWifi.SetProfile(interfaceId, ProfileType.AllUser, profile, null, true);
    await NativeWifi.ConnectNetworkAsync(
            interfaceId: interfaceId,
            profileName: SSID,
            bssType: BssType.Infrastructure,
            timeout: TimeSpan.FromSeconds(10));
}

先讀取 profile 檔案後透過 EnumerateInterfaces 取得 Windows 上所有無線連線裝置
每一個 Interface 會儲存自己的 Profile
所以針對每一個 Interface 做 SetProfile 設定 Profile 後透過 ConnectNetworkAsync 連線至指定 Wifi

如果重複執行此程式碼,會不斷斷線在連線,如果要定時執行則要加入判斷是否已經連線

分類於:

標籤:

, ,