• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
张纯睿
博客园    首页    新随笔    联系   管理    订阅  订阅

VC HTML IHtmlDocument相关代码

1、从IE窗体获得IHTMLDocument2 接口 2、获得 IHTMLDocument2 全部文本内容

1、从IE窗体获得IHTMLDocument2 接口

2、获得 IHTMLDocument2 全部文本内容

参考 VC HTML IHtmlDocument相关代码片段

  http://blog.csdn.net/demon_evil/archive/2008/03/21/2201976.aspx

《.h》

#include <mshtml.h>
#include <atlbase.h>
#include <oleacc.h>

class CHtmlOper
{
public:
 CHtmlOper(void);
 ~CHtmlOper(void);
 static IHTMLDocument2 * GetHTMLDocInterface(HWND hWnd);
 static CString GetHtmlSource(IHTMLDocument2 * pHDoc2);
 static void OnBnClickedButton35SaveAndShow(BSTR   pContent);
};

《.cpp》
IHTMLDocument2 * CHtmlOper::GetHTMLDocInterface(HWND hWnd)
{

//  从IE窗体获得IHTMLDocument2 接口
 IHTMLDocument2*   spDoc = NULL;
 // fun1: IHTMLDocument2   *   MyGetHTMLDocInterface(HWND   hWnd)
 //#include <mshtml.h>
 //#include <atlbase.h>
 //#include <oleacc.h>
 //Header  Oleacc.h 
 //Library  Oleacc.lib 
 {
  IHTMLDocument2*   spDoc2=NULL;
  //   Explicitly   load   MSAA   so   we   know   if   it 's   installed
  HINSTANCE   hInst   =   ::LoadLibrary(_T("OLEACC.DLL"));
  if   (hInst   !=   NULL)
  {
    LRESULT   lRes;

    UINT   nMsg   =   ::RegisterWindowMessage( _T("WM_HTML_GETOBJECT"));
    ::SendMessageTimeout(   hWnd,   nMsg,   0L,   0L,   SMTO_ABORTIFHUNG,   1000,   (DWORD*)&lRes   );
    LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, "ObjectFromLresult" );

    if   (pfObjectFromLresult   !=   NULL   )
    {
      HRESULT   hr;
      hr = (*pfObjectFromLresult)( lRes, IID_IHTMLDocument, 0, (void**)&spDoc2 );

      if(SUCCEEDED(hr))
      {
        CComPtr <IDispatch>   spDisp;
        CComQIPtr <IHTMLWindow2>   spWin;
        spDoc2-> get_Script(&spDisp);
        spWin = spDisp;
        spWin-> get_document(&spDoc2);
        spDisp.Release();
        spWin.Release();
      }
    }   //   else   document   not   ready
    ::FreeLibrary(   hInst   );
  }
  //   else   Active   Accessibility   is   not   installed
  spDoc = spDoc2; // return spDoc2;
 }
 return spDoc;

 //////////////////////////////////////////////////////////////////
 IHTMLDocument2*   spDoc2=NULL;
 //   Explicitly   load   MSAA   so   we   know   if   it 's   installed
 HINSTANCE   hInst   =   ::LoadLibrary(_T("OLEACC.DLL"));
 if   (hInst   !=   NULL)
 {
  LRESULT   lRes;

  UINT   nMsg   =   ::RegisterWindowMessage( _T("WM_HTML_GETOBJECT"));
  ::SendMessageTimeout(   hWnd,   nMsg,   0L,   0L,   SMTO_ABORTIFHUNG,   1000,   (DWORD*)&lRes   );
  
  LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, "ObjectFromLresult" );
  if   (pfObjectFromLresult   !=   NULL   )
  {
   HRESULT   hr;// = ObjectFromLresult( lRes, IID_IHTMLDocument, 0, (void**)&spDoc2 );
   hr = (*pfObjectFromLresult)( lRes, IID_IHTMLDocument, 0, (void**)&spDoc2 );

   if(SUCCEEDED(hr))
   {
    CComPtr <IDispatch>   spDisp;
    CComQIPtr <IHTMLWindow2>   spWin;
    
    spDoc2-> get_Script(&spDisp);
    spWin   =   spDisp;
    spWin-> get_document(&spDoc2);

    spDisp.Release();
    spWin.Release();
   }
  }   //   else   document   not   ready
  ::FreeLibrary(   hInst   );
  return spDoc2;
 }

 return NULL;
}

CString CHtmlOper::GetHtmlSource(IHTMLDocument2 * pHDoc2)
{
 // 获得 IHTMLDocument2 全部文本内容
 CString strContent; 
 if(pHDoc2==NULL)
 {
  return _T("");
 }

 CComPtr <IHTMLElementCollection>   pAllColl;
 HRESULT   hr;
 hr=pHDoc2-> get_all(&pAllColl);
 if(hr!=S_OK)
 {
  return _T("");
 }

 LONG   length=0;
 hr=pAllColl->get_length(&length);
 if(hr!=S_OK)
  return _T("");
 for(int   i=0;i <length;i++)
 {
  VARIANT   vIndex,vName;
  vName.vt=vIndex.vt=VT_I4;
  vName.lVal=vIndex.lVal=i;
  CComPtr <IDispatch>   pDisp;
  hr=pAllColl-> item(vName,vIndex,&pDisp);
  if(   hr==S_OK   )
  {
   CComPtr <IHTMLElement>   pElement;
   hr=pDisp-> QueryInterface(IID_IHTMLElement,(void**)&pElement);
   if(   hr==S_OK   )
   {
    CComBSTR   tagName;
    hr=pElement-> get_tagName(&tagName);
    if(hr==S_OK)
    {
     CString   str(tagName);
     if(str== _T("HTML"))
     {
      CComBSTR   pContent;
      hr=pElement-> get_outerHTML(&pContent);
      if(hr==S_OK)
      {
       CString s(pContent);
       strContent.Format(_T("%s"), (LPCTSTR)s);
       //OnBnClickedButton35SaveAndShow(pContent); // !!!
       i=length;//以便退出循环
      }
      else
      {//if   get_outerHTML   failed
       AfxMessageBox( _T("can't get code"));
      }
     }//else   if   tagName   isnot   'HTML '
    }//else   if   get_tagName   failed
   }//else   if   don 't   get   IHMTLElement   interface
  }//if   no   items
 }
 pHDoc2-> Release();
 return strContent;
}


void CHtmlOper::OnBnClickedButton35SaveAndShow(BSTR   pContent)
{
 TCHAR   lpFileName[MAX_PATH] = _T("c:\\FileName.txt");
 TCHAR   lpTempPath[MAX_PATH] = _T("c:\\TempPath.txt");
 DWORD   len;
 if(GetTempPath(50,lpTempPath)!=0)
 {
  if(GetTempFileName(lpTempPath,_T( "Get "),0,lpFileName)!=0)
  {
   HANDLE   hFile=::CreateFile(lpFileName,
          GENERIC_READ|GENERIC_WRITE,
          FILE_SHARE_READ|FILE_SHARE_WRITE,
          NULL,
          CREATE_ALWAYS,
          FILE_FLAG_WRITE_THROUGH,
          NULL );

   if(hFile!=NULL)
   {
    CString strContent(pContent);
    if(!WriteFile(hFile,strContent,strContent.GetLength()*sizeof(TCHAR),&len,NULL))
    {
     AfxMessageBox( _T("Can't not write to file "));
    }
    // CloseHandle(hFile);

    USES_CONVERSION;
    CString   str=_T( "notepad   ");
    str+=lpFileName;
    ::WinExec(T2A(str), SW_SHOW);

   }
   else
   {
    AfxMessageBox( _T("Error in open file"));
   }
  }
 }

}

posted @ 2011-06-25 15:46  张纯睿  阅读(524)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3