首先简单的看看在程序中得到contact内容的方法——从outlook 联系人中选取某个联系人并读出该联系人的信息,比如移动电话。
定义一个choosecontact的结构体对象并初始化,這裡要包一個庫
#pragma comment (lib , "pimstore.l")
下面程序中都有注释了就不多写了。
CHOOSECONTACT cc = {0};
IContact *pContact = NULL;
cc.cbSize = sizeof (cc);
cc.dwFlags = CCF_DEFAULT | CCF_CHOOSECONTACTONLY | CCF_ENABLEGAL;
//get the select item name cc.bstrContactName-->|CCF_RETURNCONTACTNAME
cc.hwndOwner = NULL; //hwndDlg;
// Display the Contact Chooser control and prompt the user to choose a contact.
CHR( ChooseContact( &cc ));
到这里可以调出联系人选择的界面,选择某个联系人并存储在CC所指内存中
下面对CC进行操作
//这里首先要区分开是sim联系人还是outlook联系人
if( !cc.oidContactID )
{
//Contact is from SIM.
wcscpy( szPhoneNo, cc.bstrPropertyValueSelected );
//.......
ZeroMemory( szPhoneNo , wcslen(szPhoneNo) );
}
else
{
//如果是outlook联系人则要用POOM的方式来取得内容
//Contact is in local.
// Init POOM
CHR( CoInitializeEx( NULL, 0 ));
// Create the POOM COM object.
CHR( CoCreateInstance( CLSID_Application, NULL, CLSCTX_INPROC_SERVER,
IID_IPOutlookApp2, (LPVOID *) &pPoom ));
CBR(NULL != pPoom);
// Logon to POOM.
CHR( pPoom->Logon( NULL ));
SUCCEEDED(pPoom->GetDefaultFolder(olFolderContacts, &pCurrFldr));
pCurrFldr->get_Items( &pItemCol );
//getitem成功后可以使用其方法来得到其他的项目,见MSDN关于IItem类的描述
hr = GetItemIndexFromOid( pItemCol, cc.oidContactID, &dwIndex );
pItemCol->Item( dwIndex + 1, reinterpret_cast<IDispatch**>( &pContact ));
//from Contacts
//用IContact方法来获取联系人的内容,该部分在后面详细描述
我已经很郁闷的把那么多都写出来了,就干脆放到下面好了,方便有需要的人copy
HRESULT hr = pContact->get_Oid((LONG*)&oid);
//没一个联系人的项目都会分配一个oid出来,这个oid可以在后面作获取联系人图片的时候用
//对于联系人的具体存储方式,我也是在摸索中,还请高手指点
pContact->get_AssistantName(&MyContact->AssistantName);
pContact->get_Body(&MyContact->Body);
pContact->get_Business2TelephoneNumber(&MyContact->Business2TelephoneNumber);
pContact->get_BusinessAddressCity(&MyContact->BusinessAddressCity);
pContact->get_BusinessAddressCountry(&MyContact->BusinessAddressCountry);
pContact->get_BusinessAddressPostalCode(&MyContact->BusinessAddressPostalCode);
pContact->get_BusinessAddressState(&MyContact->BusinessAddressState);
pContact->get_BusinessAddressState(&MyContact->BusinessAddressState);
pContact->get_BusinessAddressStreet(&MyContact->BusinessAddressStreet);
pContact->get_BusinessFaxNumber(&MyContact->BusinessFaxNumber);
pContact->get_CarTelephoneNumber(&MyContact->CarTelephoneNumber);
pContact->get_BusinessTelephoneNumber(&MyContact->BusinessTelephoneNumber);
pContact->get_Categories(&MyContact->Categories);
pContact->get_Children(&MyContact->Children);
pContact->get_CompanyName(&MyContact->CompanyName);
pContact->get_Anniversary(&MyContact->dAnniversary);
pContact->get_Birthday(&MyContact->dBirthday);
pContact->get_Department(&MyContact->Department);
pContact->get_Email1Address(&MyContact->Email1Address);
pContact->get_Email1Address(&MyContact->Email1Address);
pContact->get_Email1Address(&MyContact->Email3Address);
pContact->get_FileAs(&MyContact->FileAs);
pContact->get_FirstName((BSTR*)(&MyContact->FirstName));
pContact->get_HomeAddressCity(&MyContact->HomeAddressCity);
pContact->get_HomeAddressCountry(&MyContact->HomeAddressCountry);
pContact->get_HomeAddressState(&MyContact->HomeAddressState);
pContact->get_HomeFaxNumber(&MyContact->HomeFaxNumber);
pContact->get_HomeTelephoneNumber(&MyContact->HomeTelephoneNumber);
pContact->get_MiddleName(&MyContact->MiddleName);
pContact->get_MobileTelephoneNumber(&MyContact->MobileTelephoneNumber);
pContact->get_PagerNumber(&MyContact->PagerNumber);
pContact->get_RadioTelephoneNumber(&MyContact->RadioTelephoneNumber);
pContact->get_OtherAddressCity(&MyContact->OtherAddressCity);
pContact->get_OtherAddressCountry(&MyContact->OtherAddressCountry);
pContact->get_OtherAddressPostalCode(&MyContact->OtherAddressPostalCode);
pContact->get_OtherAddressState(&MyContact->OtherAddressState);
pContact->get_OtherAddressStreet(&MyContact->OtherAddressStreet);
pContact->get_Spouse(&MyContact->Spouse);
pContact->get_OfficeLocation(&MyContact->OfficeLocation);
pContact->get_JobTitle(&MyContact->JobTitle);
pContact->get_Title(&MyContact->Title);
pContact->get_Suffix(&MyContact->Suffix);
pContact->get_WebPage(&MyContact->WebPage);
pContact->get_AssistantTelephoneNumber(&MyContact->AssistantTelephoneNumber);
pContact->get_Home2TelephoneNumber(&MyContact->Home2TelephoneNumber);
pContact->get_LastName(&MyContact->LastName);
pContact->get_HomeAddressStreet(&MyContact->HomeAddressStreet);
pContact->get_HomeAddressPostalCode(&MyContact->HomeAddressPostalCode);
关于联系人pic的获取改日再来描述,大体思想也是利用poom的方法来读取!相应的API都可以在IPOutlookApp里面找到