我正在寻找一种从 WAB(Windows 通讯簿)中提取所有联系人和通讯组列表(以及相关联系人)的方法。
我需要这样做,因为我需要在 roundcube 中导入地址簿,以及通讯组列表/组。
经过一些研究,我在 Code Project ( http://www.codeproject.com/Articles/3407/Accessing-the-Windows-Address-Book ) 上创建了一个 C++ 项目,但这只支持联系人。
环顾 MSDN,我发现 iAddrBook 的 OpenEntry 方法应该在第三个参数中支持要打开的接口(interface),在我的例子中是 iDistList,但我找不到接口(interface) ID。
我搜索了一些关于 WAB 文件结构的文档,但一无所获。
有什么建议吗?
最佳答案
这是我用来完成这个的路径:
- 我使用 wab32 dll 中的 WABOpen 方法获取 LPADRBOOK lpAddr;
- 我设置 PAB 文件夹 lpAddr:调用 lpAddr->GetPAB(),OpenEntry 获取容器,然后在容器上调用 GetContentsTable 获取 LPMAPITABLE lpTable。
- 要获取表元素计数,请在 lpTable 上使用 GetRowCount
- 要验证给定的表行是否是分发列表,请使用 QueryRows,这应该返回 MAPI_DISTLIST 或 MAPI_MAILUSER。
- 如果这是一个 MAPI_DISTLIST 行,则使用其 PR_ENTRYID 调用 lpAdrBook->OpenEntry(),这应该返回 IABContainer 容器,您可以在该容器上调用 GetContentsTable 以获取包含此分发列表内容的表。
最后一个OpenEntry如下所示,我没有在任何地方设置第三个参数:
// Now emails will be loaded.
ULONG ulObjType;
IUnknown* lpUnk;
hr = lpAdrBook->OpenEntry(DistEntryId.size, (LPENTRYID)DistEntryId.ab, NULL, 0, &ulObjType, &lpUnk );
if (FAILED(hr)) {
assert(false); return hr;
}
关于c++ - 从 wab (mapi) 中提取联系人和分发列表(组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9404827/