实现打开/关闭飞行模式

#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

转载于:https://www.cnblogs.com/papam/archive/2009/08/24/1552750.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值