註:如果在程式中添加了下面要求的標頭檔和庫檔案後,仍提示找不到或者外部參考錯誤,那麼就要在wm614\public目錄下搜尋一下添加的lib檔案和標頭檔,然後分別拷貝到:D:\Program Files\Windows Mobile 6 SDK\PocketPC\Include\Armv4i\和D:\Program Files\Windows Mobile 6 SDK\PocketPC\Lib\Armv4i\目錄下面。
n 添加標頭檔和庫檔案
#include <wrlspwr.h>
#pragma comment (lib, "ossvcs.lib")
n Wifi開啟關閉實現
Ø 關閉
RDD * deviceList = NULL;
GetWirelessDevices(&deviceList, WIRELESS_NO_PHONE);
ChangeRadioState(deviceList, 0, POWER_POST_SAVE);
FreeDeviceList(pDevice);
Ø 開啟
RDD * deviceList = NULL;
GetWirelessDevices(&deviceList, WIRELESS_NO_PHONE);
ChangeRadioState(deviceList, 1, POWER_POST_SAVE);
FreeDeviceList(pDevice);
由於實現比較簡單,那麼就介紹一下GetWirelessDevices和ChangeRadioState這兩個函數,其實也就是簡單翻譯一下mobile 6 文檔上面的說明。
Ø GetWirelessDevices
l 函數原型
HRESULT GetWirelessDevices(
RDD **pDevices,
DWORD dwFlags
);
l 參數意義
pDevices :指向鏈表中裝置指標的地址,如果成功,將會是一個RDD結構類型的節點
dwFlags :代表哪一個裝置去設定或者是否設定所期望的狀態,下面是可能的值及其描述:
Flag |
值 |
描述 |
WIRELESS_GET_DESIRED |
1 |
返回RDD結構中所期望的成員變數的所期望的裝置狀態。當無線訊號開啟的時候,這是使用者所希望的。例如:如果使用者將電話設在電源管理器中,但是將訊號關閉,這個變數的值仍是1.但是實際的狀態dwState仍是0.如果你僅僅對裝置的目前狀態感興趣,那就不要傳遞這個參數並且在所期望的成員變數中也不要渴望有意義的值返回。 |
WIRELESS_NO_POWER_MAN |
2 |
返回列表中排除有電源管理的無線裝置 |
WIRELESS_NO_PHONE |
4 |
返回列表中沒有電話裝置 |
l 傳回值
值 |
描述 |
S_OK |
成功設定無線裝置狀態 |
E_FAIL |
指定失敗 |
S_FALSE |
記憶體不足 |
Ø ChangeRadioState
l 函數原型
HRESULT ChangeRadioState(
RDD *pDev,
DWORD dwState
SAVEACTION sa
);
l 參數意義
pDev:指定無線裝置鏈表中的裝置
dwState:指定要設定的電源狀態,下面是可能的值:
狀態 |
值 |
描述 |
OFF |
0 |
關閉無線裝置電源 |
ON |
1 |
開啟無線裝置電源 |
DISCOVERABLE |
2 |
設定無線裝置,可以被其他藍牙裝置發現 |
sa :指定所希望的狀態在註冊表中是如何更新的,下面是可能的枚舉值:
typedef enum _SAVEACTION {
POWER_DONT_SAVE = 0,
POWER_PRE_SAVE,
POWER_POST_SAVE,
} SAVEACTION;
值 |
描述 |
POWER_DONT_SAVE |
當射頻狀態改變時,將不會被更新 |
POWER_PRE_SAVE |
無論射頻狀態如何改變,射頻狀態的儲存優先於射頻狀態的改變 |
POWER_POST_SAVE |
無論射頻狀態如何改變,新的狀態都會儲存為使用者指定的狀態 |
l 傳回值
值 |
描述 |
S_OK |
成功設定射頻狀態 |
E_FAIL |
射頻狀態沒有被改變 |
S_FALSE |
射頻狀態已經設為所期望的狀態 |