惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

有赞技术团队
有赞技术团队
MyScale Blog
MyScale Blog
The Hacker News
The Hacker News
Google DeepMind News
Google DeepMind News
The Cloudflare Blog
GbyAI
GbyAI
Vercel News
Vercel News
量子位
Apple Machine Learning Research
Apple Machine Learning Research
Recent Announcements
Recent Announcements
美团技术团队
D
DataBreaches.Net
H
Help Net Security
大猫的无限游戏
大猫的无限游戏
人人都是产品经理
人人都是产品经理
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
B
Blog RSS Feed
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Y
Y Combinator Blog
S
Secure Thoughts
S
SegmentFault 最新的问题
The Last Watchdog
The Last Watchdog
Jina AI
Jina AI
Security Archives - TechRepublic
Security Archives - TechRepublic
F
Fortinet All Blogs
C
Check Point Blog
小众软件
小众软件
阮一峰的网络日志
阮一峰的网络日志
Schneier on Security
Schneier on Security
MongoDB | Blog
MongoDB | Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Stack Overflow Blog
Stack Overflow Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Hacker News: Ask HN
Hacker News: Ask HN
博客园 - 【当耐特】
Simon Willison's Weblog
Simon Willison's Weblog
Scott Helme
Scott Helme
S
Security @ Cisco Blogs
SecWiki News
SecWiki News
Hugging Face - Blog
Hugging Face - Blog
博客园 - 叶小钗
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Google Online Security Blog
Google Online Security Blog
S
Securelist
L
LINUX DO - 最新话题
Forbes - Security
Forbes - Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
I
InfoQ
Engineering at Meta
Engineering at Meta

博客园 - 做想做的人,做想做的事

baidu 浅谈WCF操作 OracleClient精简版 水晶报表注册码学习 朋友要的PPC软件包 C# 操作DTS[lkcn修改] 转Delphi 操作 DTS 下着电影或开着自己的服务器断网时电脑自动关闭 Maxsder.exe光驱病毒专杀工具 小代码测试杀毒软件的性能 IP地址 IFRAME清除工具 没事学学DELPHI~ 一个不错的图片素材网站 移动窗体C# - 做想做的人,做想做的事 - 博客园 监控注册表键的改动,也可以监控文件夹 C++ 不要再用TD了 单引号和双引号~ 孟子老兄BLOG的彩色光标 C#WINFORM
获得本机电话号码
做想做的人,做想做的事 · 2006-06-26 · via 博客园 - 做想做的人,做想做的事

  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
 31HRESULT 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
137FuncExit:
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
150HRESULT SHGetPhoneNumber(LPTSTR szNumber, UINT cchNumber, UINT nLineNumber)
151{
152    return SHReadLineAddressCaps(szNumber, cchNumber, NULL, nLineNumber);
153}
154
155
156int 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