导入outlook联系人 如何导入outlook联系人?现在可以导入outlook联系人,但是outlook分组中的联系人读不出来,并且分组后面建立的所有联系人读不出来!即没有分组的时候都可以读出来!问题:如何读出outlook中,各个分组的联系人! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.vckbase.net/document/viewdoc/?id=660 An excellant post in codeguru.Import address book from OESome of this code is EXTREMELY complicated to say the very least. Good luck.You will need to include:#include "mapix.h"#include "addrlkup.h"First call the GETMSExchangeUSers() function seen below:void CMAPITestDlg::GetMSExchangeUsers(CStringList &NameList){ CString cst; HRESULT hr = ::MAPIInitialize(NULL); ASSERT(S_OK == hr); LPMAPISESSION pSession = NULL; hr = ::MAPILogonEx(0, NULL, NULL, MAPI_LOGON_UI | MAPI_ALLOW_OTHERS | MAPI_EXTENDED, &pSession); ASSERT(SUCCEEDED(hr)); LPADRBOOK lpAdrBook = NULL; hr = pSession->OpenAddressBook(0, 0, MAPI_ACCESS_MODIFY, &lpAdrBook); ASSERT(SUCCEEDED(hr)); ULONG cbeid = 0; LPENTRYID peid = NULL; hr = HrFindExchangeGlobalAddressList(lpAdrBook, &cbeid, &peid); if (SUCCEEDED(hr)) { ULONG openFlags = MAPI_BEST_ACCESS; hr = lpAdrBook->OpenEntry(cbeid, peid, NULL, openFlags, &ulObjType, (LPUNKNOWN *)&dlpPABEntry); if (hr ==S_OK) { SizedSPropTagArray(2, sptStoTbl) = {2, {PR_DISPLAY_NAME, PR_EMS_AB_PROXY_ADDRESSES}}; if (HR_SUCCEEDED(((LPABCONT)dlpPABEntry)->GetContentsTable(0L, &lppabcont))) { if (HR_SUCCEEDED(lppabcont->SetColumns((LPSPropTagArray)&sptStoTbl, TBL_BATCH))) { hr = ((LPMAPITABLE)lppabcont)->GetRowCount(0, &lpulCount); int x = 0; int iTotNum = lpulCount; int num_iterations = (lpulCount / 50); int num_left = (lpulCount - (num_iterations * 50)); m_Count = lpulCount; while (x < num_iterations) { if (HR_SUCCEEDED(((LPMAPITABLE)lppabcont)->QueryRows((LONG)lpulCount, 0, &lprws))) { for (int i = 0; i < (int)(*lprws).cRows; i++) { CString stro, addr, ListElement; stro.Format("%s", lprws->aRow.lpProps[0].Value.lpszA); ListElement = stro; if (IsItValid(stro) == 1) { ++cntr; ++m_MostRecentCount; cst.Format("%d", cntr); NameList.AddTail(ListElement); CString ice; ice.Format("%d of %d", cntr, iTotNum); SetDlgItemText(IDC_NUM, ice); } } } ++x; } if (HR_SUCCEEDED(((LPMAPITABLE)lppabcont)->QueryRows((LONG)lpulCount, 0, &lprws))) { for (int i = 0; i < num_left; i++) { CString stro, addr, ListElement; stro.Format("%s", lprws->aRow.lpProps[0].Value.lpszA); ListElement = stro; if (IsItValid(stro) == 1) { ++cntr; ++m_MostRecentCount; cst.Format("%d", cntr); NameList.AddTail(ListElement); } } } } } } } else { AfxMessageBox("Error..."); } if (peid) { ::MAPIFreeBuffer(peid); } if (lpAdrBook) { lpAdrBook->Release(); } ::MAPIUninitialize();} vcmute(横秋) ( ) 好多变量没声名,msdn都没找到这些方法!能不能把链接贴给我 http://www.vckbase.net/document/viewdoc/?id=660的例子进行如下修改可以达到你的要求我的outlook是2003#import "C:\Program Files\Common Files\Microsoft Shared\OFFICE11\mso.dll" named_guids#import "C:\Program Files\Microsoft Office\OFFICE11\MSOUTL.olb" \ no_namespace exclude("_IRecipientControl", "_DRecipientControl")...... _ApplicationPtr pApp; HRESULT hr; m_ListEmail.ResetContent(); try { hr=pApp.CreateInstance(__uuidof(Application)); if (FAILED(hr)) { AfxMessageBox("Outlook实例创建失败"); return 1; } // 获取默认Outlook中联系人文件夹 MAPIFolderPtr pFolder = pApp->GetNamespace(_bstr_t("MAPI"))->GetDefaultFolder(olFolderContacts); _FoldersPtr pFolders; while (pFolder) { _ItemsPtr pItems; _ContactItemPtr pContact; pItems=pFolder->GetItems(); if (pItems==NULL) { AfxMessageBox("不能得到联系人条目"); return 1; } pContact=pItems->GetFirst(); while(pContact) { CString strTemp; strTemp=(char *)pContact->GetFullName(); strTemp=strTemp + "<"; strTemp=strTemp + (char *)pContact->GetEmail1Address(); strTemp=strTemp + ">"; m_ListEmail.AddString(strTemp); pContact=pItems->GetNext(); } pFolders = pFolder->GetFolders(); if (pFolders) pFolder = pFolders->GetFirst(); } } catch(_com_error &e) { AfxMessageBox((char *)e.Description()); }......I don't know why 似乎GetFolders是取下一个 唉!还是不行,我的也是outlook2003 to platinum15 (心碎便便) 我昨晚在我的机器上试过,没问题啊?!你自己试过么 修改控件背景色 字符串比较问题 VC 报错:fatal error C1004 今天的面试题(自学C果然够呛,望大家多多提示) 刚开始用VC,一个MFC的最简单的问题。 UDP包的构造,给出我的代码!怎么得不到我想要得结果啊?!在线等?!!!!! Remon Spekreijse编的串口Cserialport类能不能设置4个以上的串口 各位大侠,怎样让对话框框上的各个控件跟着窗口的大小变化而变化 CMarkupMSXML类AddChildElem会多个属性 xmlns="",有鬼? VC禁止修改内存要怎么做呢。。 线程定时器的问题 关于用钩子截取某一程序的socket的recv函数的问题
Import address book from OE
Some of this code is EXTREMELY complicated to say the very least. Good luck.
You will need to include:
#include "mapix.h"
#include "addrlkup.h"
First call the GETMSExchangeUSers() function seen below:
void CMAPITestDlg::GetMSExchangeUsers(CStringList &NameList)
{
CString cst;
HRESULT hr = ::MAPIInitialize(NULL);
ASSERT(S_OK == hr);
LPMAPISESSION pSession = NULL;
hr = ::MAPILogonEx(0, NULL, NULL, MAPI_LOGON_UI | MAPI_ALLOW_OTHERS | MAPI_EXTENDED, &pSession);
ASSERT(SUCCEEDED(hr));
LPADRBOOK lpAdrBook = NULL;
hr = pSession->OpenAddressBook(0, 0, MAPI_ACCESS_MODIFY, &lpAdrBook);
ASSERT(SUCCEEDED(hr));
ULONG cbeid = 0;
LPENTRYID peid = NULL;
hr = HrFindExchangeGlobalAddressList(lpAdrBook, &cbeid, &peid);
if (SUCCEEDED(hr))
{
ULONG openFlags = MAPI_BEST_ACCESS;
hr = lpAdrBook->OpenEntry(cbeid, peid, NULL, openFlags, &ulObjType, (LPUNKNOWN *)&dlpPABEntry);
if (hr ==S_OK)
{
SizedSPropTagArray(2, sptStoTbl) = {2, {PR_DISPLAY_NAME, PR_EMS_AB_PROXY_ADDRESSES}};
if (HR_SUCCEEDED(((LPABCONT)dlpPABEntry)->GetContentsTable(0L, &lppabcont)))
{
if (HR_SUCCEEDED(lppabcont->SetColumns((LPSPropTagArray)&sptStoTbl, TBL_BATCH)))
{
hr = ((LPMAPITABLE)lppabcont)->GetRowCount(0, &lpulCount);
int x = 0;
int iTotNum = lpulCount;
int num_iterations = (lpulCount / 50);
int num_left = (lpulCount - (num_iterations * 50));
m_Count = lpulCount;
while (x < num_iterations)
{
if (HR_SUCCEEDED(((LPMAPITABLE)lppabcont)->QueryRows((LONG)lpulCount, 0, &lprws)))
{
for (int i = 0; i < (int)(*lprws).cRows; i++)
{
CString stro, addr, ListElement;
stro.Format("%s", lprws->aRow.lpProps[0].Value.lpszA);
ListElement = stro;
if (IsItValid(stro) == 1)
{
++cntr;
++m_MostRecentCount;
cst.Format("%d", cntr);
NameList.AddTail(ListElement);
CString ice;
ice.Format("%d of %d", cntr, iTotNum);
SetDlgItemText(IDC_NUM, ice);
}
}
}
++x;
}
if (HR_SUCCEEDED(((LPMAPITABLE)lppabcont)->QueryRows((LONG)lpulCount, 0, &lprws)))
{
for (int i = 0; i < num_left; i++)
{
CString stro, addr, ListElement;
stro.Format("%s", lprws->aRow.lpProps[0].Value.lpszA);
ListElement = stro;
if (IsItValid(stro) == 1)
{
++cntr;
++m_MostRecentCount;
cst.Format("%d", cntr);
NameList.AddTail(ListElement);
}
}
}
}
}
}
}
else
{
AfxMessageBox("Error...");
}
if (peid)
{
::MAPIFreeBuffer(peid);
}
if (lpAdrBook)
{
lpAdrBook->Release();
}
::MAPIUninitialize();
}
能不能把链接贴给我
我的outlook是2003
#import "C:\Program Files\Common Files\Microsoft Shared\OFFICE11\mso.dll" named_guids
#import "C:\Program Files\Microsoft Office\OFFICE11\MSOUTL.olb" \
no_namespace exclude("_IRecipientControl", "_DRecipientControl")
......
_ApplicationPtr pApp;
HRESULT hr; m_ListEmail.ResetContent();
try
{
hr=pApp.CreateInstance(__uuidof(Application));
if (FAILED(hr))
{
AfxMessageBox("Outlook实例创建失败");
return 1;
} // 获取默认Outlook中联系人文件夹 MAPIFolderPtr pFolder = pApp->GetNamespace(_bstr_t("MAPI"))->GetDefaultFolder(olFolderContacts);
_FoldersPtr pFolders;
while (pFolder)
{
_ItemsPtr pItems;
_ContactItemPtr pContact;
pItems=pFolder->GetItems();
if (pItems==NULL)
{
AfxMessageBox("不能得到联系人条目");
return 1;
}
pContact=pItems->GetFirst();
while(pContact)
{
CString strTemp;
strTemp=(char *)pContact->GetFullName();
strTemp=strTemp + "<";
strTemp=strTemp + (char *)pContact->GetEmail1Address();
strTemp=strTemp + ">";
m_ListEmail.AddString(strTemp); pContact=pItems->GetNext();
}
pFolders = pFolder->GetFolders();
if (pFolders)
pFolder = pFolders->GetFirst();
}
}
catch(_com_error &e)
{
AfxMessageBox((char *)e.Description());
}
......
I don't know why 似乎GetFolders是取下一个
我昨晚在我的机器上试过,没问题啊?!你自己试过么