中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > 综合其它
CB6中读取OUTLOOK中的地址簿
作者:3996906 时间:2003-01-21 11:03 出处:互联网 责编:chinaitpower
              摘要:CB6中读取OUTLOOK中的地址簿

首先感谢在这方面研究过的前辈们!

express 和 outlook都能读

cpp前面要声明
#pragma link "Outlook_2K_SRVR"
#pragma link "IvDictio"
#pragma link "IvMulti"
typedef HRESULT (WINAPI *fWABOpen)(LPADRBOOK*,LPWABOBJECT*,LPWAB_PARAM,DWORD);

用了bcb的outlook控件的
代码
try{
                FormList->ListView1->Clear();
                _ApplicationPtr pApp;
                _NameSpace* pNS;
                AddressLists* pAddr;
                AddressEntries * pAddrEntries;
                AddressEntry* pEntry;
                AddressList* pList;
                int count,count1;
                pApp = this->OutlookApplication1->get_Application();
                pNS = pApp->GetNamespace(WideString("MAPI"));
                pAddr = pNS->AddressLists;
                count = pAddr->Count;

                WideString email;

                email.SetLength(128);
                //emailname.SetLength(128);

                for(int i = 1;i <= count;i++)
                {
                        pList = pAddr->Item(TVariant(i));
                        pAddrEntries = pList->get_AddressEntries();
                        count1 = pAddrEntries->Count;
                        for(int j = 1;j <= count1;j++)
                        {
                                pEntry = pAddrEntries->Item(TVariant(j));
                                //pEntry->get_Name(&emailname);
                                pEntry->get_Address(&email);
                                //this->Memo1->Lines->Add(AnsiString(emailname.c_bstr()) + "\t" + AnsiString(email.c_bstr()));
                                TListItem * ListItem;
                                ListItem = FormList->ListView1->Items->Add();
                                ListItem->Caption = "";
                                ListItem->SubItems->Add(AnsiString(email.c_bstr()));

                                ListItem->Checked = true;
                        }

                }
                ListView1->SetFocus();
                ListView1->Update();
        }
        catch(...)
        {
                try{
                        HRESULT hRes;
                        //LPADRBOOK lpAdrBook;
                        DelphiInterface<IAddrBook>  lpAdrBook;
                //LPWABOBJECT lpWABObject;
                        DelphiInterface<IWABObject>  lpWABObject;
                //LPWAB_PARAM lpWABParam = NULL;
                DWORD Reserved2 = NULL;

                        char szPath[MAX_PATH];
                        SHGetFolderPathX(szPath);
                        char * s = "\\System\\wab32.dll";
                        strcat(szPath, s);

                HINSTANCE hinstLib;
                hinstLib = LoadLibrary(szPath);

               // hinstLib = LoadLibrary(s.c_str()+"\\System\\wab32.dll");
                fWABOpen procWABOpen;

                if (hinstLib != NULL)
                {
                // 获取"Wab32.dll"内部涵数WABOpen的进程地址
                procWABOpen = (fWABOpen) GetProcAddress(hinstLib, "WABOpen");

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

                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;
                                        DelphiInterface<IABContainer>  lpContainer;
                hRes = lpAdrBook->OpenEntry(
                                                lpcbEntryID,
                lpEntryID,
                NULL,
                ulFlags,
                &ulObjType,
                (LPUNKNOWN FAR *)&lpContainer
                        );

                ulFlags = NULL;

                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);
                SRowSet *lpRows;

                hRes = lpTable->QueryRows(
                ulRows,// 获取所有行
                0,
                &lpRows
                );
                ListView1->Clear();
                for(ULONG i=0;i<lpRows->cRows;i++)
                {
                SRow *lpRow = &lpRows->aRow[i];
                AnsiString strTemp;

                for(ULONG j=0;j<lpRow->cValues;j++)
                {
                SPropValue *lpProp = &lpRow->lpProps[j];

                if (lpProp->ulPropTag == PR_EMAIL_ADDRESS_A)
                                                                {
                                                                        TListItem * ListItem;
                                                                        ListItem = FormList->ListView1->Items->Add();
                                                                        ListItem->Caption = "";
                                                                        ListItem->SubItems->Add((char *)lpProp->Value.lpszA);
                //strTemp =(char *)lpProp->Value.lpszA;

                                                                        ListItem->Checked = true;
                                                                }
                }
                //ListEmail->Lines->Add(strTemp);

                lpWABObject->FreeBuffer(lpRow);
                }
                lpWABObject->FreeBuffer(lpRows);
                }
                }
                //FreeLibrary(hinstLib);(装载和释放 dll 文件的地方改成在主程序执行之前装载,结束的时候释放)
                }


                }
                catch(...)
                {
                        MessageBox(Handle,"没有找到地址薄!","提示信息",MB_OK);
                }
        }


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有