#pragma once
#include <tapi.h>
#include <Extapi.h>
#pragma comment(lib,"Cellcore.lib")
class TapiFun
{
private:
HLINEAPP m_hLineApp;
DWORD dwNumDev;
DWORD dwAPIVersionLow;
DWORD dwAPIVersionHigh;
/*返回:0成功/非0错误代码*/
LONG Initialize()
{
LINEINITIALIZEEXPARAMS lInitPar;
lInitPar.Handles.hEvent=NULL;
lInitPar.dwTotalSize=sizeof(LINEINITIALIZEEXPARAMS);
lInitPar.dwOptions = 2;
DWORD dwNumDev = NULL;
DWORD dwAPIVersion = 0x20000;
return lineInitializeEx(&m_hLineApp,NULL,NULL,TEXT("CmdSwitch"),&dwNumDev,&dwAPIVersion,&lInitPar);
}
DWORD NegotiateVersion(DWORD deviceID)
{
DWORD apiVer;
LINEEXTENSIONID lineextensionid;
if(0!=lineNegotiateAPIVersion(m_hLineApp,deviceID,dwAPIVersionLow,dwAPIVersionHigh,&apiVer,&lineextensionid))
{
return 0; //失败
}
else
{
return apiVer;
}
}
HLINE GetCellLine()
{
LPLINEDEVCAPS devCaps;
DWORD dSize;
for(DWORD num=0;num<dwNumDev;++num)
{
DWORD dwVersion = NegotiateVersion(num);
dSize = sizeof(LINEDEVCAPS);
devCaps = (LPLINEDEVCAPS) new BYTE[dSize];
devCaps->dwTotalSize= dSize;
LONG lGDC = lineGetDevCaps(m_hLineApp,num,dwVersion,NULL,devCaps);
if(lGDC==LINEERR_STRUCTURETOOSMALL || devCaps->dwTotalSize<devCaps->dwNeededSize)
{
dSize = devCaps->dwNeededSize;
delete devCaps;
devCaps = (LPLINEDEVCAPS) new BYTE[dSize];
devCaps->dwTotalSize= dSize;
lGDC = lineGetDevCaps(m_hLineApp,num,dwVersion,NULL,devCaps);
}
if(lGDC!=0 || !(devCaps->dwMediaModes & LINEMEDIAMODE_DATAMODEM))
{
delete devCaps;
devCaps = NULL;
continue;
}
TCHAR lineName[255];
CopyMemory(lineName,(char *)((char *)devCaps+devCaps->dwLineNameOffset),devCaps->dwLineNameSize);
if(!wcscmp(lineName,TEXT("Cellular Line"))) //验是否是电话线路
{
delete devCaps;
devCaps = NULL;
HLINE hLine;
return 0!=lineOpen(m_hLineApp,num,&hLine,dwVersion,0,0,LINEMEDIAMODE_INTERACTIVEVOICE,LINECALLPRIVILEGE_OWNER,NULL)?NULL:hLine;
}
else
{
delete devCaps;
devCaps = NULL;
}
}
return NULL;
}
public:
TapiFun(void)
{
m_hLineApp = NULL;
dwAPIVersionLow = 0x10004;
dwAPIVersionHigh = 0x20000;
}
~TapiFun(void)
{
}
/*
* 打开/关闭飞行模式
* open:TRUE打开/FALSE关闭
* 返回:0成功/-1初始化失败/-2获取线路失败
*/
int FlightMode(BOOL open)
{
LONG iniRS = Initialize();
if(iniRS!=0)return -1;
HLINE hLine = GetCellLine();
if(hLine==NULL)return -2;
if(open)
{
//打开飞行模式
lineSetEquipmentState(hLine,LINEEQUIPSTATE_MINIMUM);
lineClose(hLine);
lineShutdown(m_hLineApp);
}
else
{
lineSetEquipmentState(hLine,LINEEQUIPSTATE_FULL);
lineRegister(hLine,LINEREGMODE_AUTOMATIC,NULL,NULL);
lineClose(hLine);
lineShutdown(m_hLineApp);
}
return 0;
}
};
转至 http://www.cnblogs.com/MS-Frank/archive/2008/11/21/1338590.html