从 Outlook 导入联系人






4.74/5 (17投票s)
2003 年 2 月 21 日

751246

5767
示例源代码,使用 Office/Outlook 对象模型从 Outlook 导入项目。
引言
Outlook 已成为个人信息管理软件的事实标准。几乎每个人都使用此软件来管理他们的需求。因此,需要以编程方式操作 Outlook 中存储的信息。微软为此提供了 Outlook 对象模型。仔细查看 MSDN 上的示例,会发现几乎所有示例都是用 Visual Basic 编写的。那么(不太差劲的 ;-))C++ 程序员该怎么办呢?由于 Outlook 对象模型是一系列 COM 接口,任何符合 COM 标准的语言都可以使用它。此示例可以从 Outlook 中的任何联系人文件夹导入联系人。
要在 C++ 中使用 Office/Outlook 对象,需要导入以下文件...
//For Office XP
#import "E:\Program Files\Common Files\Microsoft Shared\Office10\mso.dll" named_guids
#import "E:\Microsoft Office\Office10\MSOUTL.OLB" \ no_namespace
exclude("_IRecipientControl", "_DRecipientControl");
//For Office 2000
#import "E:\Program Files\Common Files\Microsoft Shared\Office10\mso.dll" named_guids
#import "E:\Microsoft Office\Office10\MSOUTL.OLB" \ no_namespace
exclude("_IRecipientControl", "_DRecipientControl");
//Code to import Contacts...
_ApplicationPtr pApp;
_ItemsPtr pItems;
MAPIFolderPtr pFolder;
_ContactItemPtr pContact;
HRESULT hr;
try
{
hr=pApp.CreateInstance(__uuidof(Application));
if (FAILED(hr))
{
MessageBox("Unable to instantiate Outlook.",
"Outlook Error",MB_OK);
return;
}
if (m_Option.GetCheck()) //default outlook contacts folder
{
pFolder=pApp->GetNamespace(_bstr_t("MAPI"))->
GetDefaultFolder(olFolderContacts);
if (pFolder==NULL)
{
MessageBox("Could not find default contacts folder.",
"Outlook Error");
return;
}
}
else //display folder selection window
{
pFolder=pApp->GetNamespace(_bstr_t("MAPI"))->PickFolder();
if (pFolder==NULL)
return;
if (pFolder->GetDefaultItemType()!=olContactItem)
{
MessageBox("Select folder is not a Contact folder.",
"Outlook Contacts");
return;
}
}
pItems=pFolder->GetItems();
if (pItems==NULL)
{
MessageBox("Unabel to get Contact Items.",
"Outlook Error");
return;
}
pContact=pItems->GetFirst();
m_ContactList.ResetContent();
while(1)
{
if (pContact==NULL)
break;
CString strTemp;
strTemp=(char *)pContact->GetFullName();
strTemp=strTemp + "<";
strTemp=strTemp + (char *)pContact->GetEmail1Address();
strTemp=strTemp + ">";
m_ContactList.AddString(strTemp);
pContact=pItems->GetNext();
}
}
catch(_com_error &e)
{
MessageBox((char *)e.Description());
}
此示例导入联系人信息,但稍作修改就可以导入 Outlook 中的任何其他信息。这包括约会项目、电子邮件消息、便笺、任务等。例如,要从日历文件夹导入约会项目,只需创建 _AppointmentItemPtr 智能指针类对象,而不是 _ContactItemPtr 对象即可。