不知道会不会来不及回答,把我知道的放在这里,希望对你有帮助。
首先,如果您的系统已经更新到 16299(Fall Creator Update),您可以简单地使用 UWP 的新 wifi api。安装最新的 Windows SDK,创建一个 C# 控制台项目,目标 C# 版本至少为 7.1,然后添加两个对项目的引用。
- C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETCore\v4.5\System.Runtime.WindowsRuntime.dll
- C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.16299.0\Windows.winmd
毕竟,下面的代码应该可以工作。
using System;
using System.Threading.Tasks;
using Windows.Devices.Enumeration;
using Windows.Devices.WiFi;
class Program
{
static async Task Main(string[] args)
{
var dic = await DeviceInformation.FindAllAsync(WiFiAdapter.GetDeviceSelector());
if (dic.Count > 0)
{
var adapter = await WiFiAdapter.FromIdAsync(dic[0].Id);
foreach (var an in adapter.NetworkReport.AvailableNetworks)
{
if (an.Ssid == "Ssid which you want to connect to.")
{
// Fouth parameter which is ssid can not be set to null even if we provided
// first one, or an exception will be thrown.
await adapter.ConnectAsync(an, WiFiReconnectionKind.Manual, null, "",
WiFiConnectionMethod.WpsPushButton);
}
}
}
}
}
构建并运行exe,然后按下路由器的按钮,您的电脑将连接到路由器。
但是如果你不能更新到 16299,WCN 将是你唯一的选择。您可能已经注意到,如果首先使用按钮方法调用 IWCNDevic::Connect,WSC(Wifi 简单配置)会话将失败。这是因为 WNC 不会以登记者的身份启动按钮会话,而只会以注册商的身份启动。这意味着您必须确保在调用 IWCNDevic::Connect 之前已按下路由器的按钮。这样做的方法是使用 Native Wifi api 重复扫描您的路由器,从扫描结果中分析最新的 WSC 信息元素,确认 Selected Registrar 属性已设置为 true 并且 Device Password Id 属性已设置为 4。之后,查询IWCNDevice,调用Connect函数就成功了。然后您可以调用 IWCNDevice::GetNetworkProfile 来获取可用于连接到路由器的配置文件。
- WlanEnuminterfaces:用于获取可用的 wifi 接口。
- WlanRegisterNotification:用于注册回调以处理扫描连接结果。
- WlanScan:用于扫描指定的wifi BSS。
- WlanGetNetworkBsslist:用于在扫描后获取最新的 BSS 信息。
- WlanSetProfile:用于保存 BSS 的配置文件。
- WlanConnect:用于连接到 BSS。
关于 WSC 信息元素及其属性,您可以在Wi-Fi 简单配置技术规范 v2.0.5中找到所有信息。