读取地址本内容

// main.h

#include <windows.h>
#include <crtdbg.h>
#include <iostream.h>

#include <wab.h>

typedef HRESULT (WINAPI *fWABOpen)(LPADRBOOK*,LPWABOBJECT*,LPWAB_PARAM,DWORD);

int main()
{
 HRESULT hRes;
 LPADRBOOK lpAdrBook;
 LPWABOBJECT lpWABObject;
 LPWAB_PARAM lpWABParam = NULL;
 DWORD Reserved2 = NULL;

 HINSTANCE hinstLib;
 hinstLib = LoadLibrary("C:\\Program Files\\Common Files\\System\\wab32");
 fWABOpen procWABOpen;

 if (hinstLib != NULL)
 {
  procWABOpen = (fWABOpen) GetProcAddress(hinstLib, "WABOpen");

  if (procWABOpen != NULL)
  {
   hRes = (procWABOpen)(&lpAdrBook,&lpWABObject,NULL,Reserved2);
   _ASSERTE(hRes == S_OK);
   if (hRes != S_OK) exit(1);

   //lpWABObject->Find(lpAdrBook,NULL);
   ULONG lpcbEntryID;
   ENTRYID *lpEntryID;
   hRes = lpAdrBook->GetPAB(
    &lpcbEntryID,
    &lpEntryID
   );
   _ASSERTE(hRes == S_OK);
   if (hRes != S_OK) exit(2);

   ULONG ulFlags = MAPI_BEST_ACCESS;
   ULONG ulObjType = NULL;
   LPUNKNOWN lpUnk = NULL;
   hRes = lpAdrBook->OpenEntry(
    lpcbEntryID,
    lpEntryID,
    NULL,
    ulFlags,
    &ulObjType,
    &lpUnk
   );

   ulFlags = NULL;
   //IABTable *lpTable;
   
   if (ulObjType == MAPI_ABCONT)
   {
    IABContainer *lpContainer = static_cast <IABContainer *>(lpUnk);
    LPMAPITABLE lpTable = NULL;
    hRes = lpContainer->GetContentsTable(
     ulFlags,
     &lpTable
    );
    _ASSERT(lpTable);
    ULONG ulRows;
    hRes = lpTable->GetRowCount(0,&ulRows);
    _ASSERTE(hRes == S_OK);
    cout << "Rows " << ulRows << endl;
    SRowSet *lpRows;

    hRes = lpTable->QueryRows(
     ulRows,  // Get all Rows
     0,
     &lpRows
    );
    for(ULONG i=0;i<lpRows->cRows;i++)
    {
     SRow *lpRow = &lpRows->aRow[i];
     cout << i << " : " << lpRow->cValues << endl;
     for(ULONG j=0;j<lpRow->cValues;j++)
     {
      SPropValue *lpProp = &lpRow->lpProps[j];
      cout << "\t" << j << " : " << (void*)lpProp->ulPropTag << " : ";
      
      if (lpProp->ulPropTag == PR_DISPLAY_NAME_A)
       cout << "Display Name: " << lpProp->Value.lpszA;
      if (lpProp->ulPropTag == PR_EMAIL_ADDRESS_A)
       cout << "Email Address: " << lpProp->Value.lpszA;
      if (lpProp->ulPropTag == PR_NICKNAME_A)
       cout << "Nickname: " << lpProp->Value.lpszA;
      if (lpProp->ulPropTag == PR_ADDRTYPE_A)
       cout << "Addrtype: " << lpProp->Value.lpszA;
      cout << endl;
     }
     lpWABObject->FreeBuffer(lpRow);
    }
    lpWABObject->FreeBuffer(lpRows);
   }
  }
  FreeLibrary(hinstLib);
 }
 return 0;
}

转载于:https://www.cnblogs.com/xiaotaoliang/archive/2005/07/16/193824.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值