zoukankan      html  css  js  c++  java
  • 在线程中读取Outlook地址本

     在读取的工作类中使用了 std::deque<std::string>,在ActiveX类中使用 std::vector<std::string>存放读取到的编排成xml格式的联系人数据。fireEvent时pop_back.
     html叶面中的写法是:
    <SCRIPT language="jscript" ID="readerObjScript" FOR="readerObj" EVENT="ReturnContactsXML">
    <!--
     //初始化数据
     try
     {
      var xmlContent = document.forms[0].readerObj.GetContacts();

      if(xmlContent && xmlContent.length > 0)
      { 
       var num = TextBoxXML.innerText;
       TextBoxXML.innerText = parseInt(num) + 100;
      }
     }
     catch(e)
     {
      //alert("发生错误,这可能是由于程序不支持从您默认的邮件客户端导入数据,\n" +
      //window.close();
     } 
    //-->
    </SCRIPT>
    <OBJECT id="readerObj" codeBase="WebABReader.ocx#version=1,0,0,1" height="0" width="0" classid="CLSID:272F256D-5E0B-4AC7-9739-C0E257CAD9E9"
        VIEWASTEXT>
        <PARAM NAME="_Version" VALUE="65536">
        <PARAM NAME="_ExtentX" VALUE="26">
        <PARAM NAME="_ExtentY" VALUE="26">
        <PARAM NAME="_StockProps" VALUE="0">
       </OBJECT>
       <textarea id="TextBoxXML" cols=70 rows=18>0</textarea>
    <script language="javascript">
    <!--
    ///////////////////////全局数据/////////////////////////

    //保存xml数据的文本框编号
    var gXmlTextBoxId;

    InitGlobal('TextBoxXML');

    ////////////////////////////////////////////////////////
    //初始化全局变量
    function InitGlobal(xmlTextBoxId)
    {
     gXmlTextBoxId = xmlTextBoxId;
     
     window.setTimeout(doLoadContact,1000); 
    }
    function doLoadContact()
    {
     try
     {
      document.forms[0].readerObj.DoReadContacts(); 
      //alert('done!!');
      //parent.notifyDone();
     }
     catch(e)
     { 
      alert(e.message);
      alert("导入发生错误,这可能是由于您的浏览器设置不允许下载完成此功能的控件");
     }
    }
    -->
    </script> 


    DEFAULT_MAIL_CLIENT GetDefaultMailClient()
    {
        TCHAR    m_szDefMailClient[_MAX_PATH 
    + 1= _T("SOFTWARE\\Clients\\Mail");
        LONG retval;
        RegKey_ regKey;        
        retval 
    = regKey.Open(HKEY_LOCAL_MACHINE, m_szDefMailClient);

        DEFAULT_MAIL_CLIENT result 
    = NONE;
        
    if(retval == NO_ERROR)
        
    {
            DWORD cbData 
    = _MAX_PATH;
            retval 
    = regKey.ReadString(m_szDefMailClient, cbData);
            
            
    char * pStr = strupr(m_szDefMailClient);

            
    if(! strcmp(pStr,"OUTLOOK EXPRESS") )
                result 
    = OUTLOOKEXPRESS;        //outlook express
            else if(! strcmp(pStr, "MICROSOFT OUTLOOK") )
                result 
    = OUTLOOK;        //outlook
        }

        
    return result;
    }


    //读取联系人
    LRESULT CWebABReaderCtrl::OnReadContactsDone(WPARAM wParam, LPARAM lParam)
    {
        
    if(lParam)
        
    {
            
    //m_strContactsXML = new char[XML_BUF_SIZ];
            //strcpy(this->m_strContactsXML,(char*)lParam);

            m_cs.Lock();
            
    this->m_contactsList.push_back(m_pOutlookABGetter->m_contactsList.front()); 
            m_pOutlookABGetter
    ->m_contactsList.pop_front();
            m_cs.Unlock();

            FireReturnContactsXML();
            
            
    //delete m_strContactsXML;
            //m_strContactsXML = NULL;
            return 0L;
        }
        
        
    return 1L;
    }


    void CWebABReaderCtrl::FireReturnContactsXML()
    {
        FireEvent(eventidReturnContactsXML,EVENT_PARAM(VTS_NONE));

        
    //GetContacts();
    }


    void CWebABReaderCtrl::DoReadContacts() 
    {
        
    //int nBuffSize = 256*1024;    //读256K

        
    //m_strContactsXML = new char[nBuffSize];
        //m_strContactsXML[0] = '\0';

        DEFAULT_MAIL_CLIENT defaultClient 
    = GetDefaultMailClient();
        
        
    switch(defaultClient)
        
    {    
        
    case OUTLOOKEXPRESS:            //outlook express
            {
                COEABReader oeReader;
                
    //oeReader.GetContacts( m_strContactsXML );
            }

            
    break;
        
    case OUTLOOK:
            
    {
                
    //HRESULT hRes;
                // 接口列集
                //hRes = CoMarshalInterThreadInterfaceInStream(IID_DWebABReader, GetIDispatch(FALSE), &m_pStream);
                CWinThread * t = AfxBeginThread(_Apartment, (LPVOID)this);
                t
    ->ResumeThread();

                
    //DoReadFromOutlook();
            }

            
    break;
        
    default:
            MessageBox(
    "默认的邮件客户端程序不是Outlook或者OutlookExpress");
            
    break;
        }

        
    //if(strlen(this->m_strContactsXML))
        //{
        //    this->FireReturnContactsXML();
        //}
        //delete[] m_strContactsXML;
        //m_strContactsXML = NULL;

    }


    void CWebABReaderCtrl::DoReadFromOutlook()
    {    
        m_pOutlookABGetter 
    = new COutlookContactsGetter(this->m_hWnd);
        
    if(m_pOutlookABGetter->IsInitOK())
        
    {
            m_pOutlookABGetter
    ->GetContacts();
            
    //strcpy(m_strContactsXML,xml.c_str());    
        }

    }


    BSTR CWebABReaderCtrl::GetContacts() 
    {
        CString result 
    = "";
        
    if! m_contactsList.empty())
        
    {
            m_cs.Lock();
            std::string xml 
    = m_contactsList.back();
            result 
    = xml.c_str();
            
    //::MessageBox(NULL,xml.c_str(),"",MB_OK);
            m_contactsList.pop_back();
            m_cs.Unlock();
        }

        
    return result.AllocSysString();
    }

    DWORD CWebABReaderCtrl::Apartment()
    {
        CoInitialize(NULL);
        
    //HRESULT hRes;

        
    //m_spT.Release();

        
    //接口散集
        //if (m_pStream)
        //hRes = CoGetInterfaceAndReleaseStream(m_pStream, IID_DWebABReader, (void**)&m_spT);

        
    //m_spT->DoReadFromOutlook();
        DoReadFromOutlook();

        
    //m_spT.Release();

        CoUninitialize();
        
    return 0;
    }


    UINT CWebABReaderCtrl::_Apartment(
    void* pv)
    {
        CWebABReaderCtrl
    * pThis = (CWebABReaderCtrl*) pv;
        pThis
    ->Apartment();
        
    return 0;
    }

  • 相关阅读:
    nyoj 17 单调递增最长子序列
    nyoj 18 The Triangle
    nyoj 712 探 寻 宝 藏
    nyoj 61传纸条(一)
    nyoj 269 VF
    nyoj 44 子串和
    nyoj 252 01串
    nyoj 42 一笔画问题
    nyoj 756 重建二叉树
    Table 样式设置
  • 原文地址:https://www.cnblogs.com/xiaotaoliang/p/276462.html
Copyright © 2011-2022 走看看