• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Benjamin

            靜以修身,儉以養(yǎng)德,非澹薄無以明志,非寧靜無以致遠。
            隨筆 - 397, 文章 - 0, 評論 - 196, 引用 - 0
            數(shù)據(jù)加載中……

            如何獲取PDA/PPC的IMEI/IMSI號碼

            IMEI(International Mobile Equipment Identity,國際移動身份識別)俗稱”串號”存儲在手機的EEPROM(俗稱碼片)里,每一個移動設備都對應一個唯一的IMEI。其組成結構為TAC(6位數(shù)字)+FAC(兩位數(shù)字)+SNR(6位數(shù)字)+SP (1位數(shù)字)。IMEI唯一地識別一個移動設備,用于監(jiān)控被竊或無效的移動設備。
            IMSI的全稱是International Mobile Subscriber Identification Number,也就是客戶識別碼。在GSM系統(tǒng)中,給每個移動用戶分配一個唯一的國際用戶識別碼IMSI,此碼在網(wǎng)中所有位置包括漫游區(qū)都是有效的。
            下面的類是自己封裝的,用來獲取IMEI/IMSI號碼。
            #pragma once
            #endif // _MSC_VER > 1000

            //#include "resource.h"


            #define TAPI_API_LOW_VERSION    0x00010003
            #define TAPI_CURRENT_VERSION 0x00020000
            #define EXT_API_LOW_VERSION     0x00010000
            #define EXT_API_HIGH_VERSION    0x00010000

            typedef struct Info
            {
             char IMSI[128];
             char IMEI[128];
            }Siminfo;

            class SimInfo 
            {
            public:
             SimInfo();
             virtual ~SimInfo();

             static SimInfo Info;
            public:

             bool Init();
             Siminfo GetGeneralInfo();
             DWORD m_dwNumDevs;
             DWORD m_dwAPIVersion;
             HLINEAPP m_hLineApp;
             HLINE m_hLine;
             DWORD m_dwExtVersion;
             DWORD m_dwTSPILineDeviceID;
             
             LPTSTR g_dwImei;
             
             
            private:
             void GetTAPIErrorMsg(TCHAR *szMsg,int nSize, DWORD dwError);
             DWORD GetTSPLineDeviceID(const TCHAR* const psTSPLineName);
             
            };

            #endif // !defined(AFX_IMEI1_H__84CB8CFD_9DA9_470E_867E_2D689F916CBE__INCLUDED_)

            // DevInfo.cpp: implementation of the DevInfo class.
            //
            //////////////////////////////////////////////////////////////////////

            #include "stdafx.h"
            //#include "imei.h"
            #include "DevInfo.h"

            #ifdef _DEBUG
            #undef THIS_FILE
            static char THIS_FILE[]=__FILE__;
            #define new DEBUG_NEW
            #endif

            //////////////////////////////////////////////////////////////////////
            // Construction/Destruction
            //////////////////////////////////////////////////////////////////////

            DevInfo::DevInfo()
            {
             m_dwAPIVersion = TAPI_CURRENT_VERSION;
                m_hLineApp = 0;
                m_hLine = 0;
                m_dwExtVersion = 0;
            }

            DevInfo::~DevInfo()
            {
             
            }

            bool DevInfo::Init()
            {
             // set the line init params
                LINEINITIALIZEEXPARAMS LineExtParams;
                LineExtParams.dwTotalSize = sizeof(LineExtParams);
                LineExtParams.dwOptions = LINEINITIALIZEEXOPTION_USEEVENT;
               
                if (::lineInitializeEx(&m_hLineApp, 0, 0, _T("Developer.com Test"),
              &m_dwNumDevs, &m_dwAPIVersion, &LineExtParams))
                {
              //EndDialog(IDOK);
              return false;
                }
             
             m_dwTSPILineDeviceID = GetTSPLineDeviceID(CELLTSP_LINENAME_STRING);
             //m_dwTSPILineDeviceID = GetTSPLineDeviceID(L"GPRS Modem - Data Port as COM7:");
             if ( m_dwTSPILineDeviceID == (DWORD)-1 )
             {
              ::lineShutdown(m_hLineApp);
              //EndDialog(IDOK);
              return false;
             }
             
                // open the line
                if( ::lineOpen(m_hLineApp, m_dwTSPILineDeviceID,
              &m_hLine, m_dwAPIVersion, 0, 0,
              LINECALLPRIVILEGE_OWNER, LINEMEDIAMODE_DATAMODEM, 0) )
                {
              ::lineShutdown(m_hLineApp);
              //EndDialog(IDOK);
              return false;
                }
             
                // set up ExTAPI
                if ( ::lineNegotiateExtVersion(m_hLineApp, m_dwTSPILineDeviceID,
              m_dwAPIVersion, EXT_API_LOW_VERSION,
              EXT_API_HIGH_VERSION, &m_dwExtVersion) )
                {
              ::lineClose(m_hLine);
              ::lineShutdown(m_hLineApp);
              //EndDialog(IDOK);
              return false;
                }
             
             return true;
            }

            DWORD DevInfo::GetTSPLineDeviceID(const TCHAR *const psTSPLineName)
            {
             DWORD dwReturn = -1;
                for(DWORD dwCurrentDevID = 0 ; dwCurrentDevID < m_dwNumDevs ; dwCurrentDevID++)
                {
                    LINEEXTENSIONID LineExtensionID;
                    if( ::lineNegotiateAPIVersion(m_hLineApp, dwCurrentDevID,
               TAPI_API_LOW_VERSION, TAPI_CURRENT_VERSION,
               &m_dwAPIVersion, &LineExtensionID) == 0 )
                    {
                        LINEDEVCAPS LineDevCaps;
                        LineDevCaps.dwTotalSize = sizeof(LineDevCaps);
                        if( ::lineGetDevCaps(m_hLineApp, dwCurrentDevID,
                m_dwAPIVersion, 0, &LineDevCaps) == 0 )
                        {
                            BYTE* pLineDevCapsBytes = new BYTE[LineDevCaps.dwNeededSize];
                            if(0 != pLineDevCapsBytes)
                            {
                                LINEDEVCAPS* pLineDevCaps = (LINEDEVCAPS*)pLineDevCapsBytes;
                                pLineDevCaps->dwTotalSize = LineDevCaps.dwNeededSize;
                                if( ::lineGetDevCaps(m_hLineApp, dwCurrentDevID,
                  m_dwAPIVersion, 0, pLineDevCaps) == 0 )
                                {
                                    if(0 == _tcscmp((TCHAR*)((BYTE*)pLineDevCaps+pLineDevCaps->dwLineNameOffset),
                   psTSPLineName))
                                    {
                                        dwReturn = dwCurrentDevID;
                                    }
                                }
                                delete[]  pLineDevCapsBytes;
                            }
               }
              }
                }
                return dwReturn;
            }
            //獲取手機SIM卡信息(IMEI國際移動設備識別碼)國際移動用戶識別碼(IMSI)
            DevInfo DevInfo::GetGeneralInfo()
            {
             DevInfo Result;
             memset(Result.IMEI, 0, 128);
             memset(Result.IMSI, 0, 128);

             LPBYTE pLineGeneralInfoBytes = NULL;
                const DWORD dwMediaMode = LINEMEDIAMODE_DATAMODEM;
                LINEGENERALINFO lviGeneralInfo;
                LPLINEGENERALINFO plviGeneralInfo;
                LPTSTR tsManufacturer, tsModel, tsRevision, tsSerialNumber, tsSubscriberNumber;
             CString sInfo;
             
                lviGeneralInfo.dwTotalSize = sizeof(lviGeneralInfo);
             
                LONG lRes = ::lineGetGeneralInfo(m_hLine, &lviGeneralInfo);
                if (lRes != 0 && lRes != LINEERR_STRUCTURETOOSMALL)
                {
              TCHAR szMsg[255];
              GetTAPIErrorMsg(szMsg,sizeof(szMsg), lRes);
              AfxMessageBox(szMsg);
            //  return c;
                }

                pLineGeneralInfoBytes = new BYTE[lviGeneralInfo.dwNeededSize];
                plviGeneralInfo = (LPLINEGENERALINFO)pLineGeneralInfoBytes;
             
                if(pLineGeneralInfoBytes != NULL)
                {
                    plviGeneralInfo->dwTotalSize = lviGeneralInfo.dwNeededSize;
                    if ( (lRes = ::lineGetGeneralInfo(m_hLine, plviGeneralInfo)) != 0 )
                    {
               TCHAR szMsg[255];
               GetTAPIErrorMsg(szMsg,sizeof(szMsg), lRes);
               AfxMessageBox(szMsg);
                    }
              else
              {
               TCHAR szUnavailable[] = L"Unavailable";
               if(plviGeneralInfo->dwManufacturerSize)
               {
                tsManufacturer = (WCHAR*)(((BYTE*)plviGeneralInfo)+plviGeneralInfo->dwManufacturerOffset);
               }
               else
               {
                tsManufacturer = szUnavailable;
               }
               
               if(plviGeneralInfo->dwModelSize)
               {
                tsModel = (WCHAR*)(((BYTE*)plviGeneralInfo)+plviGeneralInfo->dwModelOffset);
               }
               else
               {
                tsModel = szUnavailable;
               }
               
               if(plviGeneralInfo->dwRevisionSize)
               {
                tsRevision = (WCHAR*)(((BYTE*)plviGeneralInfo)+plviGeneralInfo->dwRevisionOffset);
               }
               else
               {
                tsRevision = szUnavailable;
               }
               
               if(plviGeneralInfo->dwSerialNumberSize)
               {
                tsSerialNumber = (WCHAR*)(((BYTE*)plviGeneralInfo)+plviGeneralInfo->dwSerialNumberOffset);
               }
               else
               {
                tsSerialNumber = szUnavailable;
               }
               
               if(plviGeneralInfo->dwSubscriberNumberSize)
               {
                tsSubscriberNumber = (WCHAR*)(((BYTE*)plviGeneralInfo)+plviGeneralInfo->dwSubscriberNumberOffset);
               }
               else
               {
                tsSubscriberNumber = szUnavailable;
               }
               
               sInfo.Format(L"Manufacturer: %s\nModel: %s\nRevision: %s\nSerial No: %s\nSubscriber No: %s\n",
                tsManufacturer,
                tsModel,
                tsRevision,
                tsSerialNumber,
                tsSubscriberNumber);
               int a = sizeof(tsSerialNumber);
               int b = sizeof(tsSubscriberNumber);
              
               int Length =0;
               while(1)
               {
                Result.IMSI[Length++] = (char)*tsSubscriberNumber++;

                if((char)*tsSubscriberNumber<=0 )
                 break;
               } 
               int Len = 0;
               while(1)
               {
                Result.IMEI[Len++] = (char)*tsSerialNumber++;

                if( (char)*tsSerialNumber<=0)
                 break;
               } 
              }
                }
             
             delete [] pLineGeneralInfoBytes;

             if( strlen(Result.IMEI) > 15)
             {
              memcpy(Result.IMEI,(Result.IMEI) + (strlen(Result.IMEI) - 15),15);
              Result.IMEI[15] = '\0';
             }
             if( strlen(Result.IMSI) >  15)
              memcpy(Result.IMSI,(Result.IMSI) + (strlen(Result.IMSI) - 15),15);
             
             return Result;
            }

            void DevInfo::GetTAPIErrorMsg(TCHAR *szMsg, int nSize, DWORD dwError)
            {
             LPTSTR lpBuffer = 0;
             DWORD dwRet = 0;
             
             dwRet = ::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
              NULL,TAPIERROR_FORMATMESSAGE(dwError),MAKELANGID(LANG_NEUTRAL, LANG_NEUTRAL),
              (LPTSTR) &lpBuffer,0,NULL);
             memset(szMsg,0,nSize);
             if (lpBuffer && dwRet)
             {
              _tcscpy(szMsg,lpBuffer);
              LocalFree(lpBuffer);
             }
             else
             {
              _stprintf(szMsg,L"Unknown Error: 0x%X",dwError);
             }
            }

            用法示例:
            DevInfo imei;
             imei.Init();
              Info e = imei.GetGeneralInfo();

            posted on 2009-02-07 15:42 Benjamin 閱讀(4406) 評論(5)  編輯 收藏 引用 所屬分類: PDA/PPC開發(fā)

            評論

            # re: 如何獲取PDA/PPC的IMEI/IMSI號碼[未登錄]  回復  更多評論   

            我編譯沒通過。你能幫幫我吧。
            2009-05-02 06:44 | dean

            # 請問如何從PC端編程讀取cemail.vol里面的短信?  回復  更多評論   

            請問如何從PC端編程讀取cemail.vol里面的短信?

            不需要在手機在安裝軟件
            2009-06-07 14:57 | 江蘇

            # re: 如何獲取PDA/PPC的IMEI/IMSI號碼  回復  更多評論   

            關于cemail.vol里的短信讀取,無聊客講的比較清楚,可以參考一下.
            2009-06-11 22:50 | Benjamin

            # re: 如何獲取PDA/PPC的IMEI/IMSI號碼  回復  更多評論   

            博主厲害啊,我也正在做這個工作,讀取sim卡的imsi號碼和imei號碼,可是看博主的代碼中,很多看不明白,比如:SimInfo,DevInfo之類的定義。我QQ25350294,msn:juvinchen@gmail.com可否加博主請教一下呢?謝謝了!
            2009-09-16 21:36 | 陳俊偉

            # re: 如何獲取PDA/PPC的IMEI/IMSI號碼[未登錄]  回復  更多評論   

            我的QQ61457940 想請教下你。在C#中怎么使用你這段代碼呢
            2012-04-26 11:52 | ALEX
            久久精品国产亚洲一区二区三区| 久久久久夜夜夜精品国产| 无码任你躁久久久久久老妇| 超级97碰碰碰碰久久久久最新| 亚洲精品乱码久久久久66| 久久精品国产半推半就| 亚洲国产精品无码久久青草| 婷婷五月深深久久精品| 久久久WWW免费人成精品| 人妻精品久久久久中文字幕69| 成人午夜精品久久久久久久小说| 久久亚洲国产精品成人AV秋霞| 国产精品VIDEOSSEX久久发布| 久久精品国产亚洲AV影院| 久久91这里精品国产2020| 精品永久久福利一区二区| 久久热这里只有精品在线观看| 一本大道加勒比久久综合| 一本色道久久综合狠狠躁| 欧美性猛交xxxx免费看久久久| 国产∨亚洲V天堂无码久久久| 狠狠色丁香婷婷久久综合五月| 热久久国产精品| 久久亚洲精品视频| 国产V亚洲V天堂无码久久久| 亚洲香蕉网久久综合影视 | 久久精品无码专区免费青青| 久久久久亚洲精品男人的天堂| 久久精品九九亚洲精品天堂| 激情伊人五月天久久综合| 欧美大香线蕉线伊人久久| 99久久99久久精品国产片果冻| 久久青青色综合| 狠狠色丁香婷婷久久综合五月| 亚洲伊人久久成综合人影院 | 久久久久久久91精品免费观看| 久久久久99精品成人片三人毛片| 国产精品伊人久久伊人电影| 品成人欧美大片久久国产欧美... 品成人欧美大片久久国产欧美 | 蜜臀久久99精品久久久久久| 久久影视综合亚洲|