2012-02-22 8 views
0

WAB(Windowsアドレス帳)からすべての連絡先と配布リスト(関連する連絡先を含む)を抽出する方法を探しています。wab(mapi)から連絡先と配布リスト(グループ)を抽出する

配布リスト/グループを持つアドレス帳をroundcubeにインポートする必要があるため、これを行う必要があります。

いくつかの調査の末、私はコードプロジェクト(http://www.codeproject.com/Articles/3407/Accessing-the-Windows-Address-Book)にC++プロジェクトを創設しましたが、このサポートは連絡先のみです。

MSDNを見てみると、iAddrBookのOpenEntryメソッドは、私の場合はiDistListを開くための3番目のパラメータをサポートするはずですが、どこのIDも見つけられません。

私はいくつかのドキュメントをWABファイル構造で検索しましたが、何も検索しませんでした。

提案がありますか?ここで

答えて

1

は、私はこれをacomplishために使用されるパスです:

  1. 私はLPADRBOOK lpAddrを取得するためにwab32のDLLからWABOpenメソッドを使用します。
  2. は私がPABフォルダlpAddrを設定します。lpAddr-> GetPAB()を呼び出し、OpenEntryコンテナを取得するには、その後、GetContentsTableコンテナにLPMAPITABLE lpTableを取得します。
  3. QueryRowsを使用し、指定したテーブルの行が配布リストであるかどうかを確認するにはlpTable
  4. にはgetRowCountを使用し、テーブルの要素数を取得するには、これはMAPI_DISTLISTまたはMAPI_MAILUSERを返す必要があります。
  5. これはMAPI_DISTLIST行であれば、> OpenEntry()lpAdrBook-を呼び出すためにそのPR_ENTRYIDを使用し、これはあなたがこの配布リストの内容でテーブルを取得するためにGetContentsTableを呼び出した上でのIABContainerコンテナを返す必要があります。

最後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; 
    } 
+0

私はあなたのように正確に行うのが、私のOpenEntry呼び出しが戻るこれまでMAPI_ABCONT(アドレス帳コンテナ): \ ULONG lpcbEntryID; ENTRYID * lpEntryID; hRes = lpAdrBook-> GetPAB(&lpcbEntryID、&lpEntryID); ULONG ulFlags = MAPI_BEST_ACCESS; ULONG ulObjType = NULL; LPUNKNOWN lpUnk = NULL; hRes = lpAdrBook-> OpenEntry(lpcbEntryID、lpEntryID、NULL、ulFlags、&ulObjType、&lpUnk); ulFlags = NULL; if(ulObjType == MAPI_ABCONT) { ... –

+1

ここで私のコードを見ることができます:https://github.com/luskan/wabwrap/blob/master/WABWrapper.cpp – marcinj

関連する問題