分享

获取手机的IMEI与IMSI

 _明心见性_ 2018-08-01

一.原理

    使用了Pocket PC SDK的EXTAPI

实现过程如下:

   1.首先加如头文件:
#include "tapi.h"
#include "extapi.h"
#define TAPI_API_HIGH_VERSION   0x00020000
#define EXT_API_LOW_VERSION     0x00010000
#define EXT_API_HIGH_VERSION    0x00010000

  2.引入库文件cellcore.lib

  3.输入代码即可:

BOOL GetDeviceSIMInfo(CString &strIMEI,CString &strIMSI)
{
 BOOL bSus = FALSE;                  //返回结果是否正确
 TCHAR szIMEI[MAX_PATH];             //保存设备的IMEI
 TCHAR szIMSI[MAX_PATH];             //保存设备的IMSI

 //初始化数组
 memset(szIMEI,0,sizeof(strIMEI));
 memset(szIMSI,0,sizeof(szIMSI));

 LINEGENERALINFO *lineGeneralInfo;   //保存设备序列号的信息的结构体

 HLINEAPP hLineApp = 0;
 HLINE hLine = 0;
 DWORD dwNumDevs;
 DWORD dwAPIVersion = TAPI_API_HIGH_VERSION;
 DWORD dwExtVersion = 0;
 DWORD dwDeviceID;
 DWORD dwMediaMode = LINEMEDIAMODE_DATAMODEM | LINEMEDIAMODE_INTERACTIVEVOICE;
 LONG tapiresult;
 DWORD temp;
 LINEINITIALIZEEXPARAMS lineInitializeExParams;
 lineGeneralInfo = (LINEGENERALINFO*)malloc(1024);
 lineGeneralInfo->dwTotalSize = sizeof(LINEGENERALINFO);


 lineInitializeExParams.dwTotalSize = sizeof(lineInitializeExParams);
 lineInitializeExParams.dwOptions =  LINEINITIALIZEEXOPTION_USEEVENT; //The application desires to use the Event Handle event notification mechanism
 tapiresult = lineInitializeEx(&hLineApp, 0, 0,L"SimTry", &dwNumDevs, &dwAPIVersion,&lineInitializeExParams); //returns 0 (SUCCESS)


 lineGeneralInfo = (LINEGENERALINFO*)malloc(sizeof(LINEGENERALINFO));
 lineGeneralInfo->dwTotalSize = sizeof(LINEGENERALINFO);

 for (dwDeviceID = 0; dwDeviceID < dwNumDevs;dwDeviceID++)
 {
  tapiresult = lineNegotiateExtVersion(hLineApp, dwDeviceID, dwAPIVersion, EXT_API_LOW_VERSION,
   EXT_API_HIGH_VERSION, &dwExtVersion);               //returns 0 (SUCCESS)

  tapiresult = lineOpen(hLineApp, dwDeviceID,&hLine, dwAPIVersion, 0, 0,
   LINECALLPRIVILEGE_OWNER, dwMediaMode, 0);           //returns 0 (SUCCESS)

  tapiresult = lineGetGeneralInfo(hLine, lineGeneralInfo); //returns 0 (SUCCESS)


  if((tapiresult == 0) && (lineGeneralInfo->dwNeededSize > lineGeneralInfo->dwTotalSize))
  {
   //重新获取最新的值
   temp = lineGeneralInfo->dwNeededSize;
   free(lineGeneralInfo);
   lineGeneralInfo = (LINEGENERALINFO*)malloc(temp);
   lineGeneralInfo->dwTotalSize = temp;
   tapiresult = lineGetGeneralInfo(hLine, lineGeneralInfo);

   //已将结果拿到
   //IMEI
   lstrcpy(szIMEI, (TCHAR*)((char*)lineGeneralInfo
    + lineGeneralInfo->dwSerialNumberOffset));

   //IMSI
   if(lineGeneralInfo->dwSubscriberNumberSize > 2)
   {
    for(int j=0;j<lineGeneralInfo->dwSubscriberNumberSize/2;j++)
     szIMSI[j] = *((unsigned short *)(lineGeneralInfo) + j + lineGeneralInfo->dwSubscriberNumberOffset/2);

   }

   bSus = TRUE;
   break;
  }
 }

 if(bSus)
 {
  strIMEI = CString(szIMEI);
  strIMSI = CString(szIMSI);
 }

 //回收资源
 free(lineGeneralInfo);
 if(hLine)
  lineClose(hLine);
 if(hLineApp)
  lineShutdown(hLineApp);

 return bSus;
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多