Mobile WiFi的开启和关闭代码实现
2011-08-09 22:08 和尚释然 阅读(1145) 评论(1) 编辑 收藏 举报
目前我们公司移动设备大量出现发热发烫和电池不够用的问题,严重影响正常使用.网上查询了一下发现网络设备是一个耗电大户,加上我们公司的设备在每次系统重启后都会自动打开WiFi功能.这样就存在耗电和发烫的隐患,如果设备在WiFi开启状态下在进入一个有无线网络的领域就会自动匹配连接,这个过程是比较耗电的.所以今天就实现了通过一个小工具去关闭WiFi.操作WiFi主要通过以下两个方法:DevicePowerNotify;SetDevicePower.
主要代码实现:
HRESULT WifiOn()
{
TCHAR WstrDeviceClass[128];
BOOL ret = GetWIFIDeviceName(WstrDeviceClass);
if(!ret) return ERROR_INVALID_GETWIFIDEVICENAME;
DevicePowerNotify(WstrDeviceClass, D0, POWER_NAME);
return SetDevicePower( WstrDeviceClass, POWER_NAME, D0);
}
HRESULT WifiOff()
{
TCHAR WstrDeviceClass[128];
BOOL ret = GetWIFIDeviceName(WstrDeviceClass);
if(!ret) return ERROR_INVALID_GETWIFIDEVICENAME;
DevicePowerNotify(WstrDeviceClass, D4, POWER_NAME);
return SetDevicePower( WstrDeviceClass, POWER_NAME, D4);
}
{
TCHAR WstrDeviceClass[128];
BOOL ret = GetWIFIDeviceName(WstrDeviceClass);
if(!ret) return ERROR_INVALID_GETWIFIDEVICENAME;
DevicePowerNotify(WstrDeviceClass, D0, POWER_NAME);
return SetDevicePower( WstrDeviceClass, POWER_NAME, D0);
}
HRESULT WifiOff()
{
TCHAR WstrDeviceClass[128];
BOOL ret = GetWIFIDeviceName(WstrDeviceClass);
if(!ret) return ERROR_INVALID_GETWIFIDEVICENAME;
DevicePowerNotify(WstrDeviceClass, D4, POWER_NAME);
return SetDevicePower( WstrDeviceClass, POWER_NAME, D4);
}
其中的WstrDeviceClass参数就是下面其中<DEVICE_NAME>就是适配器的名称。
HKEY_LOCAL_MACHINE / System / CurrentControlSet / Control / POWER /
State / {98C5250D-C29A-4985-AE5F-AFE5367E5006}\<DEVICE_NAME>
State / {98C5250D-C29A-4985-AE5F-AFE5367E5006}\<DEVICE_NAME>
注:{98C5250D-C29A-4985-AE5F-AFE5367E5006}\<DEVICE_NAME>是键的名称,不是子父路径的关系。
将这个键的名称直接传给SetDevicePower的pvDevice参数即可。
作者:顾恩礼
出处:http://www.cnblogs.com/guenli/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。