[C/C++源码]M8新UI下切换飞行模式
作者:LOJA 日期:2010-02-21
在旧UI中用SetFlyMode()这个SDK提供的API就可以.但是在新UI中,魅族一直没有实现SetFlyMode()这个函数,所以我们需要自己来实现,主要是实现电话开关.
Dial_SetEquipmentState()用这个未公开API就可以实现电话开关.它在PhoneAdapter.lib中定义连接,最终由PhoneAdapter.dll实现.
可以使用Dial_SetEquipmentState()来独立开关电话,但是由于固件问题,关闭电话后重启电话会自动开启(貌似注册表中没有像飞行模式那样的键值,以致无法判断开关状态,所以开机会自动打开电话,而开启飞行模式后不会自动打开).
以下这段代码可以稳定地用于MyMobile(WinCE)切换飞行模式,和系统设置/系统备份程序等实现飞行模式切换都是一致的.
#include <WlanEnableApi.h>
#include <SettingApi.h>
#include <CallNotifyApi.h>
CALL_DLLPORT_GPRS BOOL Dial_SetEquipmentState(HWND hMainWnd,DWORD dwstate); //定义这个未公开API
#pragma comment(lib,"PlatformApi.lib")
#pragma comment(lib,"PhoneAdapter.lib")
//用于0960以上SDK,来源于 管它(ScheduleTask)
//用到的修改注册表的函数
bool RegWriteDWORD(IN HKEY const hKeyName,IN LPCTSTR lpSubKey,IN LPCTSTR lpValueName,IN DWORD const dwValueIN,bool bCreateKey=false);
//设置飞行模式的状态,成功返回true,失败返回false; hWnd为窗口句柄,不用时置为NULL; bFlyMode为true时,设置为飞行模式,为false时,设置为正常模式.
bool STSetFlightMode(HWND hWnd, bool bFlightMode)
{
if (bFlightMode)
{
//设置为飞行模式
if (Dial_SetEquipmentState(hWnd, EQSTATE_DISABLETXANDRX) != RESULT_OK) //关闭电话
{
return false;
}
EnableMzwlan(false);
RegWriteDWORD(HKEY_CURRENT_USER,L"Software\\MZwlan\\",L"wlansetting",0); //修改注册表值,关闭WLAN.防止飞行后设置中WLAN状态还是开启
SwitchBTPower(FALSE);
SetFlyModeReg(true); //修改飞行状态到注册表
FlyModeSendMsgToShell(true); //通知shell显示飞行状态
}
else
{
//正常模式
SetFlyModeReg(false);
FlyModeSendMsgToShell(false);
if (Dial_SetEquipmentState(hWnd, EQSTATE_FULL) != RESULT_OK) //打开电话
{
SetFlyModeReg(true);
FlyModeSendMsgToShell(true);
return false;
}
}
return true;
}
bool RegWriteDWORD(IN HKEY const hKeyName,IN LPCTSTR lpSubKey,IN LPCTSTR lpValueName,IN DWORD const dwValue,IN bool bCreateKey)
{
HKEY hKey = NULL;
LONG lRet=0;
if (bCreateKey)
{
DWORD dwDisposition = 0; //REG_CreateD_NEW_KEY, REG_OPENED_EXISTING_KEY
lRet=::RegCreateKeyEx(hKeyName, lpSubKey, 0, NULL,REG_OPTION_NON_VOLATILE ,0 , NULL, &hKey, &dwDisposition);
}
else
{
lRet=::RegOpenKeyEx(hKeyName,lpSubKey, 0, NULL,&hKey);
}
if (ERROR_SUCCESS==lRet)
{
::RegSetValueEx(hKey,lpValueName, 0, REG_DWORD,(BYTE *)&dwValue, sizeof(dwValue));
::RegCloseKey(hKey);
return true;
}
return false;
}
上一篇: 《阿凡达》背后的意识境界
下一篇: [M8新软预告]待机助手(LittleAssistant)桌面插件版
文章来自: 本站原创
Tags: M8 MyMobile C C++ 源码 飞行模式 FlightMode
相关日志:

