#include "stdafx.h"
#include "GetConnectionInfo.h"
GUID IID_IPOutlookApp3 = {0xaf7d0dc7, 0x3d35, 0x424b, 0xaa, 0x60, 0x27, 0xa3, 0x8b, 0x8b, 0x62, 0x9e};
GUID CLSID_Application1 = {0x05058F23, 0x20BE, 0x11d2, 0x8F, 0x18, 0x00, 0x00, 0xF8, 0x7A, 0x43, 0x35};
CGetConnectionInfo::CGetConnectionInfo()
{
m_hSim = NULL;
m_nCntCount = 0;
m_pCntInfoHeader = new TConnectionInfo;
ZeroMemory(m_pCntInfoHeader, sizeof(TConnectionInfo));
}
CGetConnectionInfo::~CGetConnectionInfo()
{
if (m_pCntInfoHeader){
delete m_pCntInfoHeader;
}
}
BOOL CGetConnectionInfo::Initialize()
{
HRESULT hr;
Uninitialize();
hr = SimInitialize(SIM_INIT_SIMCARD_NOTIFICATIONS, CBSimNotify, (DWORD)this, &m_hSim);
ASSERT(m_hSim);
if (FAILED(hr)){
return FALSE;
}
SIMCAPS smc;
ZeroMemory(&smc, sizeof(smc));
smc.cbSize = sizeof(SIMCAPS);
hr = SimGetDevCaps(m_hSim, SIM_CAPSTYPE_PBINDEXRANGE, &smc);
if (FAILED(hr)){
return FALSE;
}
PConnectionInfo p;
SIMPHONEBOOKENTRY spbe;
UINT nCount = smc.dwMaxPBIndex - smc.dwMinPBIndex;
p = m_pCntInfoHeader;
for (UINT i = smc.dwMinPBIndex; i <= nCount; i++)
{
ZeroMemory(&spbe, sizeof(SIMPHONEBOOKENTRY));
spbe.cbSize = sizeof(SIMPHONEBOOKENTRY);
hr = SimReadPhonebookEntry(m_hSim, SIM_PBSTORAGE_SIM, i, &spbe);
if (SUCCEEDED(hr)){
p->pNext = CreateCntInfoNode(&spbe);
p = p->pNext;
}
}
return InitializePoom(p);
}
void CGetConnectionInfo::Uninitialize()
{
if (!m_hSim){
return;
}
SimDeinitialize(m_hSim);
m_hSim = NULL;
PConnectionInfo p1, p2;
p1 = p2 = m_pCntInfoHeader->pNext;
while (p1)
{
p2 = p1->pNext;
if (p1->pName){
delete []p1->pName;
}
if (p1->pNumStr){
delete []p1->pNumStr;
}
delete p1;
p1 = p2;
}
m_pCntInfoHeader->pNext = 0;
m_nCntCount = 0;
}
PConnectionInfo CGetConnectionInfo::CreateCntInfoNode(LPSIMPHONEBOOKENTRY lpPhonebookEntry)
{
ASSERT(lpPhonebookEntry);
UINT nStrLen = 0;
PConnectionInfo p = new TConnectionInfo;
ZeroMemory(p, sizeof(TConnectionInfo));
nStrLen = _tcslen(lpPhonebookEntry->lpszText);
if (nStrLen == 0)
{
nStrLen = _tcslen(lpPhonebookEntry->lpszAddress);
p->pName = new TCHAR[nStrLen + 1];
_tcscpy_s(p->pName, nStrLen + 1, lpPhonebookEntry->lpszAddress);
}
else
{
p->pName = new TCHAR[nStrLen + 1];
_tcscpy_s(p->pName, nStrLen + 1, lpPhonebookEntry->lpszText);
}
p->pName[nStrLen] = 0;
nStrLen = _tcslen(lpPhonebookEntry->lpszAddress);
p->pNumStr = new TCHAR[nStrLen + 1];
_tcscpy_s(p->pNumStr, nStrLen + 1, lpPhonebookEntry->lpszAddress);
p->pNumStr[nStrLen] = 0;
m_nCntCount++;
return p;
}
UINT CGetConnectionInfo::GetCntCount()
{
return m_nCntCount;
}
PConnectionInfo CGetConnectionInfo::GetFirstInfo()
{
return m_pCntInfoHeader->pNext;
}
void CGetConnectionInfo::CBSimNotify( DWORD dwNotifyCode, const void* pData, DWORD dwDataSize, DWORD dwParam )
{
switch(dwNotifyCode)
{
case SIM_NOTIFY_CARD_REMOVED:
break;
case SIM_NOTIFY_FILE_REFRESH:
break;
case SIM_NOTIFY_MSG_STORED:
break;
case SIM_NOTIFY_MSG_DELETED:
break;
case SIM_NOTIFY_PBE_STORED:
break;
case SIM_NOTIFY_PBE_DELETED:
break;
case SIM_NOTIFY_MSG_RECEIVED:
break;
case SIM_NOTIFY_RADIOON:
break;
case SIM_NOTIFY_RADIOPRESENT:
break;
case SIM_NOTIFY_RADIOREMOVED:
break;
default:
break;
}
}
BOOL CGetConnectionInfo::FindName(LPCTSTR lpNumber, LPTSTR lpNameBuf)
{
PConnectionInfo p = m_pCntInfoHeader->pNext;
BOOL bResult = FALSE;
while (p)
{
if (!_tcscmp(lpNumber, p->pNumStr))
{
_tcscpy(lpNameBuf, p->pName);
bResult = TRUE;
break;
}
p = p->pNext;
}
return bResult;
}
BOOL CGetConnectionInfo::InitializePoom(PConnectionInfo pInfo)
{
HRESULT hr;
IPOutlookApp * polApp;
IPOutlookItemCollection * pItems;
if (FAILED(CoInitializeEx(NULL, 0)))
return FALSE;
hr = CoCreateInstance(CLSID_Application1,
NULL,
CLSCTX_INPROC_SERVER,
IID_IPOutlookApp3,
(LPVOID*)&polApp);
if (FAILED(hr)) return FALSE;
hr = polApp->Logon(NULL);
if (FAILED(hr)) return FALSE;
if(GetAnItemsCollection(polApp, &pItems)){
GetAllContact(pItems, pInfo);
}
pItems->Release();
polApp->Logoff();
polApp->Release();
CoUninitialize();
return TRUE;
}
BOOL CGetConnectionInfo::GetAnItemsCollection(IPOutlookApp * polApp, IPOutlookItemCollection ** ppItems)
{
IFolder * pFolder;
HRESULT hr;
hr = polApp->GetDefaultFolder(olFolderContacts, &pFolder);
if(FAILED(hr))
return FALSE;
hr = pFolder->get_Items(ppItems);
pFolder->Release();
return (FAILED(hr)) ? FALSE : TRUE;
}
void CGetConnectionInfo::GetAllContact(IPOutlookItemCollection *pItems, PConnectionInfo pInfo)
{
PConnectionInfo p;
IContact *pContact;
HRESULT hr;
INT nCount = 0;
p = pInfo;
hr = pItems->get_Count(&nCount);
for(int i = 0; i <= nCount; i++)
{
pItems->Item(i, (IDispatch**)&pContact);
if(pContact)
{
p->pNext = CreateAContact(pContact);
p = p->pNext;
pContact->Release();
}
}
}
PConnectionInfo CGetConnectionInfo::CreateAContact(IContact* pIContact)
{
UINT nStrLen = 0;
HRESULT hr;
TCHAR *pName = new TCHAR[100];
PConnectionInfo p = new TConnectionInfo;
ZeroMemory(p, sizeof(TConnectionInfo));
ZeroMemory(pName, 100 * sizeof(TCHAR));
BSTR bstr;
hr = pIContact->get_MobileTelephoneNumber(&bstr);
ASSERT(SUCCEEDED(hr));
nStrLen = SysStringLen(bstr);
if(nStrLen == 0)
{
SysFreeString(bstr);
hr = pIContact->get_BusinessTelephoneNumber(&bstr);
ASSERT(SUCCEEDED(hr));
nStrLen = SysStringLen(bstr);
if(nStrLen == 0)
{
SysFreeString(bstr);
hr = pIContact->get_HomeTelephoneNumber(&bstr);
ASSERT(SUCCEEDED(hr));
nStrLen = SysStringLen(bstr);
}
}
p->pNumStr = new TCHAR[nStrLen + 1];
_tcscpy(p->pNumStr, bstr);
p->pNumStr[nStrLen] = 0;
SysFreeString(bstr);
hr = pIContact->get_LastName(&bstr);
ASSERT(SUCCEEDED(hr));
_tcscpy(pName, bstr);
SysFreeString(bstr);
hr = pIContact->get_FirstName(&bstr);
ASSERT(SUCCEEDED(hr));
_tcscat(pName, bstr);
SysFreeString(bstr);
hr = pIContact->get_MiddleName(&bstr);
ASSERT(SUCCEEDED(hr));
_tcscat(pName, bstr);
SysFreeString(bstr);
nStrLen = _tcslen(pName);
if(nStrLen == 0)
{
nStrLen = _tcslen(p->pNumStr);
p->pName = new TCHAR[nStrLen + 1];
_tcscpy(p->pName, p->pNumStr);
}
else
{
p->pName = new TCHAR[nStrLen + 1];
_tcscpy(p->pName, pName);
}
p->pName[nStrLen] = 0;
delete []pName;
m_nCntCount++;
return p;
}
WM 手机和SIM联系人获取类
1星 需积分: 3 62 浏览量
2009-05-26
16:02:53
上传
评论
收藏 3KB ZIP 举报
c157xigua
- 粉丝: 3
- 资源: 2
最新资源
- tensorflow-gpu-2.7.3-cp39-cp39-manylinux2010-x86-64.whl
- tensorflow-2.8.0-cp37-cp37m-manylinux2010-x86-64.whl
- tensorflow-2.7.4-cp39-cp39-manylinux2010-x86-64.whl
- 个人资料-1111相关内容
- # C 语言介绍与使用技巧 ## C 语言简介:
- 3、高质量汽车租赁系统+layui)
- 介绍 Python 的一些基本信息,并分享一些使用技巧
- Qt的tcp网络编程(客户端和服务器)
- 当谈到 Linux 常用命令时,有很多命令可以提及 以下是一些常见的 Linux 命令及其功能:
- Sora AI Video Preview Case Sora AI 视频模版项目,React全栈快速部署.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈