Vista上的Wifi支持很好,但是Native Wifi on XP已经完成了一半。 NDIS 802.11 Wireless LAN Miniport Drivers只能让您参与其中(例如网络扫描)。根据我的阅读(和尝试过),XP上的802.11 NDIS驱动程序将不允许您配置无线连接。您必须使用Native Wifi API才能执行此操作。 (如果我在这里错了,请纠正我。)像InSSIDer这样的应用程序帮助我理解了API,但是InSSIDer只是一个扫描仪而不是用来配置Wifi网络。
所以,问题是:我在哪里可以找到一些处理XP上Wifi网络配置的代码示例(C#或C ++) - 例如配置文件创建和连接管理?
我应该注意,这是一个封闭系统上的XP Embedded应用程序,我们无法使用内置的无线零配置(WZC)。我们必须在.NET应用程序中构建所有Wifi管理功能。
是的,我用Google搜索了自己的蓝色。似乎有人应该解决这个问题,但我找不到它。这就是我在这里问的原因。
感谢。
答案 0 :(得分:1)
我们在Vista上使用WZC,在Vista上使用Native WiFi,但这是我们在Vista上使用的代码,FWIW。
个人资料制作:
// open a handle to the service
if ((dwError = WlanOpenHandle(
WLAN_API_VERSION,
NULL, // reserved
&dwServiceVersion,
&hClient
)) != ERROR_SUCCESS)
{
hClient = NULL;
}
return dwError;
dwError=WlanSetProfile(hClient, &guid, 0, profile, NULL, TRUE, NULL, &reason_code);
建立联系:
WLAN_CONNECTION_PARAMETERS conn;
conn.wlanConnectionMode=wlan_connection_mode_profile;
conn.strProfile=name;
conn.pDot11Ssid=NULL;
conn.pDesiredBssidList=NULL;
conn.dot11BssType=dot11_BSS_type_independent;
conn.dwFlags=NULL;
dwError = WlanConnect(hClient, &guid, &conn, NULL);
检查连接:
BOOL ret=FALSE;
DWORD dwError;
DWORD size;
void *p=NULL;
WLAN_INTERFACE_STATE *ps;
dwError = WlanQueryInterface(hClient, &guid, wlan_intf_opcode_interface_state, NULL, &size, &p, NULL);
ps=(WLAN_INTERFACE_STATE *)p;
if(dwError!=0)
ret=FALSE;
else
if(*ps==wlan_interface_state_connected)
ret=TRUE;
if(p!=NULL) WlanFreeMemory(p);
return ret;
要保持与网络的连接,只需生成一个线程然后继续检查连接,然后在需要时重新连接。
编辑:这个标记的东西是蹩脚的。让我喜欢3次编辑,以确定正确的事情。答案 1 :(得分:1)
感谢Nick的反馈。我几乎得到了配置文件和连接管理工作。诀窍是弄清楚XP上支持Native 的Native Wifi API的哪些部分。幸运的是,Managed Wifi API具有可在XP上运行的连接/断开连接通知事件(NetworkChange也会提供类似的更改事件。)