简介: 如果此代码可以达到”飞行模式”的相同效果.实例代码关闭了GSM模块,当前你可以通过switch pTD->DeviceType的case关闭如蓝牙/WIFI等其它无线模块.代码如下:
// Radio Off, passed on Windows Mobile 5.0 AKU3.5 [3/12/2007 LiYin]
#include "Wrlspwr.h"
HRESULT RadioOff()
{
typedef void (CALLBACK *_FreeDeviceList)(RDD *pRoot);
typedef HRESULT (CALLBACK *_ChangeRadioState)(
RDD *pDev,
DWORD dwState,
SAVEACTION sa
);
typedef HRESULT (CALLBACK *_GetWirelessDevices)(
RDD **pDevices,
DWORD dwFlags
);
_GetWirelessDevices lpGetWirelessDevices;
_ChangeRadioState lpChangeRadioState;
_FreeDeviceList lpFreeDeviceList;
HINSTANCE hDll = LoadLibrary( TEXT("OSSVCS.DLL") );
if ( hDll == NULL )
{
return E_FAIL;
}
lpGetWirelessDevices =
(_GetWirelessDevices)GetProcAddress(hDll,MAKEINTRESOURCE(276));
lpChangeRadioState =
(_ChangeRadioState)GetProcAddress(hDll,MAKEINTRESOURCE(273));
lpFreeDeviceList =
(_FreeDeviceList)GetProcAddress(hDll,MAKEINTRESOURCE(280));
if (lpGetWirelessDevices == NULL||
lpChangeRadioState == NULL||
lpFreeDeviceList == NULL)
{
FreeLibrary( hDll );
return E_FAIL;
}
RDD * pDevice = NULL;
RDD * pTD;
HRESULT hr = S_OK;
if( S_OK != lpGetWirelessDevices(&pDevice, 0) ) return E_FAIL;
if (pDevice)
{
pTD = pDevice;
// loop through the linked list of devices
while (pTD)
{
switch (pTD->DeviceType)
{
case POWER_PHONE:
if (pTD->dwState)
{ // The phone is on. Turn it off and save as the
//preferred state.
MessageBox( GetForegroundWindow(),
TEXT("即将关闭射频"),
NULL, MB_OK|MB_ICONINFORMATION );
hr = lpChangeRadioState(pTD, 0, POWER_DONT_SAVE);
}
break;
default:
break;
}
pTD = pTD->pNext;
}
// Free the list of devices retrieved with GetWirelessDevices()
lpFreeDeviceList(pDevice);
}
FreeLibrary( hDll );
return hr;
}