Networking XP上的Wifi管理(SP2/SP3)
Vista上的Wifi支持不错,但还不够成熟。只会让你部分到达那里(例如网络扫描)。据我所知(并尝试过),XP上的802.11 NDIS驱动程序将不允许您配置无线连接。为此,您必须使用本机Wifi API。(如果我错了,请纠正我。)像这样的应用程序帮助我理解了API,但InSSIDer只是一个扫描器,不用于配置Wifi网络 因此,问题是:我在哪里可以找到一些处理XP上Wifi网络配置的代码示例(C#或C++),例如配置文件创建和连接管理 我应该注意,这是一个XP嵌入式应用程序,在一个封闭的系统中,我们不能使用内置的无线零配置(WZC)。我们必须将所有Wifi管理功能构建到.NET应用程序中 是的,我用谷歌搜索了一下自己。看来应该有人能解决这个问题,但我找不到。这就是我在这里问的原因Networking XP上的Wifi管理(SP2/SP3),networking,windows-xp,wireless,wifi,Networking,Windows Xp,Wireless,Wifi,Vista上的Wifi支持不错,但还不够成熟。只会让你部分到达那里(例如网络扫描)。据我所知(并尝试过),XP上的802.11 NDIS驱动程序将不允许您配置无线连接。为此,您必须使用本机Wifi API。(如果我错了,请纠正我。)像这样的应用程序帮助我理解了API,但InSSIDer只是一个扫描器,不用于配置Wifi网络 因此,问题是:我在哪里可以找到一些处理XP上Wifi网络配置的代码示例(C#或C++),例如配置文件创建和连接管理 我应该注意,这是一个XP嵌入式应用程序,在一个封闭的系统中
谢谢。我们在XP上使用WZC,在Vista上使用本机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;
检查连接:
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次编辑才能把事情做好。谢谢你的反馈,尼克。我的个人资料和连接管理基本正常。诀窍在于找出XP不支持本机Wifi API的部分。幸运的是,具有在XP上工作的连接/断开连接通知事件(也提供类似的更改事件)