微軟自XP SP2之後的系統提供了關於Wireless開發的API,
據MSDN描述,此SDK提供兩個主要功能,即:管理无线网络配置和管理无线网络连接。
使用這套API也很簡單,主要步驟如下:
- 使用WlanOpenHandle、WlanCloseHandle打開或關閉一個客戶端句柄。
- 使用WlanEnumInterfaces列舉系統中可用的Wireless設備接口,主要用到的就是它返回的每個無線網卡的GUID這個參數。
- 使用WlanGetInterfaceCapability獲取關於無線網卡的性能參數,(注意這個函數在XP SP2下是不被支持的)
- 使用WlanQueryInterface獲取關於無線網卡接口的某些參數。
- 使用WlanSetInterface設置無線網卡接口某些參數。
- 使用WlanScan列舉每個無線網卡接口上找到的可用無線AP。
- 使用WlanGetAvailableNetworkList獲取有效的無線網絡信息。
- 使用WlanGetProfile、WlanSetProfile、WlanDeleteProfile管理無線網絡配置信息。
- 使用WlanConnect、WlanDisconnect連接或斷開某個無線網絡。
在我的這個程式中隻用到WlanOpenHandle、WlanCloseHandle、WlanEnumInterfaces、WlanScan、WlanGetAvailableNetworkList就可以搜索附近的無線網絡信息。
首先,要確保Wireless Zero Configuration服務是開啟狀態。
如果它被關閉就使用StartService啟動此服務:
首先先判斷服務是否以經啟動:
啟動服務:
注意:有時候Wireless Zero Configuration服務有可能被Disable掉,這時需要將它設為自動啟動或手動啟動才能調用StartService。
加入以下代碼:
獲得一個客戶端句柄:
其中WlanOpenHandle函數參數如下(MSDN):
dwClientVersion
值 | 意思 |
---|---|
1 | 當系統版本為Windows XP SP2時。 |
2 | 當系統版本為Vista and Windows Server 2008或更高時。 |
這個參數設為NULL.
此值可以設為NULL。
一個句柄指針,用來接收獲得的客戶端句柄.
列舉系統中的網絡接口:
其中WlanEnumInterfaces函數參數如下(MSDN):
hClientHandle
使用WlanOpenHandle函數獲得的客戶端句柄。
此值設為NULL。
一個WLAN_INTERFACE_INFO_LIST結構指針的地址,你隻需要給它一個空指針就可以,用完後調用WlanFreeMemory釋放它。
掃描周圍的無線網絡:
其中WlanScan函數參數如下(MSDN):
hClientHandle
使用WlanOpenHandle函數獲得的客戶端句柄。
使用WlanEnumInterfaces函數得到的網絡接口GUID,指針類型。
一個DOT11_SSID結構指針,此函數將搜索此結構指定的網絡,如果設為NULL將會搜索所有網絡。
XP SP2: 必須設為NULL.
一个WLAN_RAW_DATA结构指針,客户端配置可能包括提供信息和802.1X认证的要求,可以設為NULL。
XP SP2: 必須設為NULL.
必須設為NULL.
獲取搜索到的無線網絡列表:
其中WlanGetAvailableNetworkList函數參數如下(MSDN):
hClientHandle
使用WlanOpenHandle函數獲得的客戶端句柄。
使用WlanEnumInterfaces函數得到的網絡接口GUID,指針類型。
值 | 意思 |
---|---|
WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_ADHOC_PROFILES | 包括所有可用的网络列表中特设的网络配置,包括配置文件不可见。 |
WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_MANUAL_HIDDEN_PROFILES | 包括所有可用的网络列表中隐藏的网络配置,包括配置文件不可见。 |
必須設為NULL.
一個WLAN_AVAILABLE_NETWORK_LIST結構指針的地址,用來接收找到的網絡信息列表,你隻需要給它一個空指針就可以,用完後調用WlanFreeMemory釋放它。
最後,設用WlanPrintInfo打印搜索到的信息:
初始化WlanAPI,本例中我是使用LoadLibrary和GetProcAddress調用Wlan API的。所以需要以下步驟: