注:如果在程序中添加了下面要求的头文件和库文件后,仍提示找不到或者外部引用错误,那么就要在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 |
射频状态已经设为所期望的状态 |