获取本机通讯薄的内容
2006-07-22 11:45:17 来源:WEB开发网第二、读取Office2000中所带Outlook2K中通讯薄方法
基本思路
由于Outlook2000下支持内部COM接口,可以利用此接口来读取其内部通讯薄中主要内容。
具体实现
一、 导入Outlook2000的库文件
// 导入读取Outlook2000中通讯薄内容所需库
二、 读取具体内容的详细代码
#import "e:\Program Files\Microsoft Office\Office\mso9.dll" named_guids
#import "e:\Program Files\Microsoft Office\Office\MSOUTL9.olb" \
no_namespace exclude("_IRecipientControl", "_DRecipientControl")_ApplicationPtr pApp;
_ItemsPtr pItems;
MAPIFolderPtr pFolder;
_ContactItemPtr pContact;
HRESULT hr;
try
{
hr=pApp.CreateInstance(__uuidof(Application));
if (FAILED(hr))
{
MessageBox("Outlook实例创建失败","错误",MB_OK);
return;
}
// 获取默认Outlook中联系人文件夹
pFolder=pApp->GetNamespace(_bstr_t("MAPI"))->GetDefaultFolder(olFolderContacts);
if (pFolder==NULL)
{
MessageBox("没有发现默认的Outlook联系人文件夹","错误!");
return;
}
else // 否则自行选择Outlook中一指定文件夹
{
pFolder=pApp->GetNamespace(_bstr_t("MAPI"))->PickFolder();
if (pFolder==NULL)
return;
if (pFolder->GetDefaultItemType()!=olContactItem) // 不是联系人
{
MessageBox("选择不是联系人文件夹","错误");
return;
}
}
pItems=pFolder->GetItems();
if (pItems==NULL)
{
MessageBox("不能得到联系人条目","错误");
return;
}
pContact=pItems->GetFirst();
m_ListEmail.ResetContent();
while(1)
{
if (pContact==NULL)
break;
CString strTemp;
strTemp=(char *)pContact->GetFullName();
strTemp=strTemp + "<";
strTemp=strTemp + (char *)pContact->GetEmail1Address();
strTemp=strTemp + ">";
m_ListEmail.AddString(strTemp);
pContact=pItems->GetNext();
}
}
catch(_com_error &e)
{
MessageBox((char *)e.Description());
}
参考文献:
Importing Contacts from Outlook -- Deepesh Dhapola
Accessing the Windows Address Book – Code4Food
更多精彩
赞助商链接