• <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)德,非澹薄無以明志,非寧靜無以致遠(yuǎn)。
            隨筆 - 397, 文章 - 0, 評論 - 196, 引用 - 0
            數(shù)據(jù)加載中……

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

            IMEI(International Mobile Equipment Identity,國際移動(dòng)身份識別)俗稱”串號”存儲在手機(jī)的EEPROM(俗稱碼片)里,每一個(gè)移動(dòng)設(shè)備都對應(yīng)一個(gè)唯一的IMEI。其組成結(jié)構(gòu)為TAC(6位數(shù)字)+FAC(兩位數(shù)字)+SNR(6位數(shù)字)+SP (1位數(shù)字)。IMEI唯一地識別一個(gè)移動(dòng)設(shè)備,用于監(jiān)控被竊或無效的移動(dòng)設(shè)備。
            IMSI的全稱是International Mobile Subscriber Identification Number,也就是客戶識別碼。在GSM系統(tǒng)中,給每個(gè)移動(dòng)用戶分配一個(gè)唯一的國際用戶識別碼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;
            }
            //獲取手機(jī)SIM卡信息(IMEI國際移動(dòng)設(shè)備識別碼)國際移動(dòng)用戶識別碼(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 閱讀(4405) 評論(5)  編輯 收藏 引用 所屬分類: PDA/PPC開發(fā)

            評論

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

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

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

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

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

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

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

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

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

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

            我的QQ61457940 想請教下你。在C#中怎么使用你這段代碼呢
            2012-04-26 11:52 | ALEX
            久久人妻少妇嫩草AV蜜桃| 久久九九亚洲精品| 婷婷五月深深久久精品| 无码国内精品久久人妻| 天天久久狠狠色综合| 亚洲精品WWW久久久久久| 97久久精品无码一区二区| 99热精品久久只有精品| 伊人久久大香线蕉av一区| 精品久久久久久国产91| 亚洲欧美国产日韩综合久久| 2021精品国产综合久久| 久久亚洲国产最新网站| 2021久久精品国产99国产精品| 久久中文字幕视频、最近更新| 国内精品伊人久久久久777| 国产三级精品久久| 久久婷婷五月综合97色一本一本| 久久婷婷五月综合成人D啪| www.久久热.com| 国产激情久久久久久熟女老人| 久久精品三级视频| 女人香蕉久久**毛片精品| 久久婷婷国产综合精品| 热99RE久久精品这里都是精品免费 | 91精品日韩人妻无码久久不卡| 狠狠色丁香久久婷婷综合蜜芽五月| 色综合色天天久久婷婷基地| 99久久99这里只有免费的精品| 久久人做人爽一区二区三区| 热RE99久久精品国产66热| 99久久夜色精品国产网站| 色综合久久中文色婷婷| 久久这里只有精品久久| 狠狠色狠狠色综合久久| 国内精品久久久久久久coent| 久久人妻AV中文字幕| 久久人妻少妇嫩草AV蜜桃| 久久伊人精品一区二区三区| 女人高潮久久久叫人喷水| 日韩美女18网站久久精品|