1获得本机电话号码注意:本文内容来自Windows Mobile Team Blog。代码部分经过测试(在上海移动网络,易通卡),未能获取到电话号码,可能是服务商不提供该服务。感兴趣的朋友可以参考一下。
  2获得本机电话号码#include "stdafx.h"
  3获得本机电话号码#include "windows.h"
  4获得本机电话号码#include "tapi.h"
  5获得本机电话号码#include "tsp.h"
  6获得本机电话号码#pragma comment(lib,"cellcore.lib")
  7获得本机电话号码
  8获得本机电话号码#define EXIT_ON_NULL(_p)     \
  9获得本机电话号码    if (_p == NULL)    \
 10获得本机电话号码{   \
 11获得本机电话号码    hr = E_OUTOFMEMORY; \
 12获得本机电话号码    goto FuncExit; \
 13获得本机电话号码
 14获得本机电话号码
 15获得本机电话号码#define EXIT_ON_FALSE(_f)     \
 16获得本机电话号码    if (!(_f))    \
 17获得本机电话号码{   \
 18获得本机电话号码    hr = E_FAIL; \
 19获得本机电话号码    goto FuncExit; \
 20获得本机电话号码
 21获得本机电话号码
 22获得本机电话号码#define MAX(i, j)   ((i) > (j) ? (i) : (j))
 23获得本机电话号码
 24获得本机电话号码#define TAPI_API_LOW_VERSION   0x00020000
 25获得本机电话号码#define TAPI_API_HIGH_VERSION  0x00020000
 26获得本机电话号码
 27获得本机电话号码#define CAPS_BUFFER_SIZE    512
 28获得本机电话号码
 29获得本机电话号码 
 30获得本机电话号码
 31获得本机电话号码HRESULT SHReadLineAddressCaps(LPTSTR szNumber, UINT cchNumber, PDWORD pdwCallFwdModes, UINT nLineNumber)
 32获得本机电话号码{
 33获得本机电话号码    HRESULT  hr = E_FAIL;
 34获得本机电话号码    LRESULT  lResult = 0;
 35获得本机电话号码    HLINEAPP hLineApp;
 36获得本机电话号码    DWORD    dwNumDevs;
 37获得本机电话号码    DWORD    dwAPIVersion = TAPI_API_HIGH_VERSION;
 38获得本机电话号码    LINEINITIALIZEEXPARAMS liep;
 39获得本机电话号码
 40获得本机电话号码    DWORD dwTAPILineDeviceID;
 41获得本机电话号码    const DWORD dwAddressID = nLineNumber - 1;
 42获得本机电话号码
 43获得本机电话号码    liep.dwTotalSize = sizeof(liep);
 44获得本机电话号码    liep.dwOptions   = LINEINITIALIZEEXOPTION_USEEVENT;
 45获得本机电话号码
 46获得本机电话号码    if (SUCCEEDED(lineInitializeEx(&hLineApp, 0, 0, TEXT("ExTapi_Lib"), &dwNumDevs, &dwAPIVersion, &liep)))
 47获得本机电话号码    {
 48获得本机电话号码
 49获得本机电话号码        BYTE* pCapBuf = NULL;
 50获得本机电话号码        DWORD dwCapBufSize = CAPS_BUFFER_SIZE;
 51获得本机电话号码        LINEEXTENSIONID  LineExtensionID;
 52获得本机电话号码        LINEDEVCAPS*     pLineDevCaps = NULL;
 53获得本机电话号码        LINEADDRESSCAPS* placAddressCaps = NULL;
 54获得本机电话号码
 55获得本机电话号码        pCapBuf = new BYTE[dwCapBufSize];
 56获得本机电话号码        EXIT_ON_NULL(pCapBuf);
 57获得本机电话号码
 58获得本机电话号码        pLineDevCaps = (LINEDEVCAPS*)pCapBuf;
 59获得本机电话号码        pLineDevCaps->dwTotalSize = dwCapBufSize;
 60获得本机电话号码
 61获得本机电话号码        // Get TSP Line Device ID
 62获得本机电话号码        dwTAPILineDeviceID = 0xffffffff;
 63获得本机电话号码        for (DWORD dwCurrentDevID = 0 ; dwCurrentDevID < dwNumDevs ; dwCurrentDevID++)
 64获得本机电话号码        {
 65获得本机电话号码            if (0 == lineNegotiateAPIVersion(hLineApp, dwCurrentDevID, TAPI_API_LOW_VERSION, TAPI_API_HIGH_VERSION,
 66获得本机电话号码                &dwAPIVersion, &LineExtensionID))
 67获得本机电话号码            {
 68获得本机电话号码                lResult = lineGetDevCaps(hLineApp, dwCurrentDevID, dwAPIVersion, 0, pLineDevCaps);
 69获得本机电话号码
 70获得本机电话号码                if (dwCapBufSize < pLineDevCaps->dwNeededSize)
 71获得本机电话号码                {
 72获得本机电话号码                    delete[] pCapBuf;
 73获得本机电话号码                    dwCapBufSize = pLineDevCaps->dwNeededSize;
 74获得本机电话号码                    pCapBuf = new BYTE[dwCapBufSize];
 75获得本机电话号码                    EXIT_ON_NULL(pCapBuf);
 76获得本机电话号码
 77获得本机电话号码                    pLineDevCaps = (LINEDEVCAPS*)pCapBuf;
 78获得本机电话号码                    pLineDevCaps->dwTotalSize = dwCapBufSize;
 79获得本机电话号码
 80获得本机电话号码                    lResult = lineGetDevCaps(hLineApp, dwCurrentDevID, dwAPIVersion, 0, pLineDevCaps);
 81获得本机电话号码                }
 82获得本机电话号码
 83获得本机电话号码                if ((0 == lResult) &&
 84获得本机电话号码                    (0 == _tcscmp((TCHAR*)((BYTE*)pLineDevCaps+pLineDevCaps->dwLineNameOffset), CELLTSP_LINENAME_STRING)))
 85获得本机电话号码                {
 86获得本机电话号码                    dwTAPILineDeviceID = dwCurrentDevID;
 87获得本机电话号码                    break;
 88获得本机电话号码                }
 89获得本机电话号码            } 
 90获得本机电话号码        } 
 91获得本机电话号码
 92获得本机电话号码        placAddressCaps = (LINEADDRESSCAPS*)pCapBuf;
 93获得本机电话号码        placAddressCaps->dwTotalSize = dwCapBufSize;
 94获得本机电话号码
 95获得本机电话号码        lResult = lineGetAddressCaps(hLineApp, dwTAPILineDeviceID, dwAddressID, dwAPIVersion, 0, placAddressCaps);
 96获得本机电话号码
 97获得本机电话号码        if (dwCapBufSize < placAddressCaps->dwNeededSize)
 98获得本机电话号码        {
 99获得本机电话号码            delete[] pCapBuf;
100获得本机电话号码            dwCapBufSize = placAddressCaps->dwNeededSize;
101获得本机电话号码            pCapBuf = new BYTE[dwCapBufSize];
102获得本机电话号码            EXIT_ON_NULL(pCapBuf);
103获得本机电话号码
104获得本机电话号码            placAddressCaps = (LINEADDRESSCAPS*)pCapBuf;
105获得本机电话号码            placAddressCaps->dwTotalSize = dwCapBufSize;
106获得本机电话号码
107获得本机电话号码            lResult = lineGetAddressCaps(hLineApp, dwTAPILineDeviceID, dwAddressID, dwAPIVersion, 0, placAddressCaps);
108获得本机电话号码        }
109获得本机电话号码
110获得本机电话号码        if (0 == lResult)
111获得本机电话号码        {
112获得本机电话号码            if (szNumber)
113获得本机电话号码            {
114获得本机电话号码                szNumber[0= _T('\0');
115获得本机电话号码
116获得本机电话号码                EXIT_ON_FALSE(0 != placAddressCaps->dwAddressSize);
117获得本机电话号码
118获得本机电话号码                // A non-zero dwAddressSize means a phone number was found
119获得本机电话号码                ASSERT(0 != placAddressCaps->dwAddressOffset);
120获得本机电话号码                PWCHAR tsAddress = (WCHAR*)(((BYTE*)placAddressCaps)+placAddressCaps->dwAddressOffset);
121获得本机电话号码
122获得本机电话号码                StringCchCopy(szNumber, cchNumber, tsAddress);
123获得本机电话号码            }
124获得本机电话号码
125获得本机电话号码            // Record the allowed forwarding modes
126获得本机电话号码            if (pdwCallFwdModes)
127获得本机电话号码            {
128获得本机电话号码                *pdwCallFwdModes = placAddressCaps->dwForwardModes;
129获得本机电话号码            }
130获得本机电话号码
131获得本机电话号码            hr = S_OK;
132获得本机电话号码        } 
133获得本机电话号码
134获得本机电话号码        delete[] pCapBuf;
135获得本机电话号码    } // End if ()
136获得本机电话号码
137获得本机电话号码FuncExit:
138获得本机电话号码    lineShutdown(hLineApp);
139获得本机电话号码
140获得本机电话号码    return hr;
141获得本机电话号码}
142获得本机电话号码
143获得本机电话号码 
144获得本机电话号码
145获得本机电话号码// szNumber - Out Buffer for the phone number
146获得本机电话号码
147获得本机电话号码//cchNumber - size of sznumber in characters
148获得本机电话号码
149获得本机电话号码// nLineNumber - which phone line (1 or 2) to get the number for
150获得本机电话号码HRESULT SHGetPhoneNumber(LPTSTR szNumber, UINT cchNumber, UINT nLineNumber)
151获得本机电话号码{
152获得本机电话号码    return SHReadLineAddressCaps(szNumber, cchNumber, NULL, nLineNumber);
153获得本机电话号码}
154获得本机电话号码
155获得本机电话号码
156获得本机电话号码int WINAPI WinMain( HINSTANCE hInstance,
157获得本机电话号码     HINSTANCE hPrevInstance,
158获得本机电话号码     LPTSTR    lpCmdLine,
159获得本机电话号码     int       nCmdShow)
160获得本机电话号码{
161获得本机电话号码 TCHAR tcNum[MAX_PATH]={0};
162获得本机电话号码 SHGetPhoneNumber(tcNum,MAX_PATH,1);
163获得本机电话号码
164获得本机电话号码 MessageBox(NULL,tcNum,_T("Number"),MB_OK);
165获得本机电话号码 
166获得本机电话号码 return 0;
167获得本机电话号码}
168获得本机电话号码
169获得本机电话号码

相关文章: