根据Internet Explorer_Server窗口得到IHtmlDocument2接口

类别:VC语言 点击:0 评论:0 推荐:

代码很少,自己看

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

BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)
{
 TCHAR buf[100];

 ::GetClassName( hwnd, (LPTSTR)&buf, 100 );
 if ( _tcscmp( buf, _T("Internet Explorer_Server") ) == 0 ) \

{
  *(HWND*)lParam = hwnd;
  return FALSE;
 }
 else
  return TRUE;
};

//You can store the interface pointer in a member variable
//for easier access
void CDlg::OnGetDocInterface(HWND hWnd)
{
 CoInitialize( NULL );

 // Explicitly load MSAA so we know if it's installed
 HINSTANCE hInst = ::LoadLibrary( _T("OLEACC.DLL") );
 if ( hInst != NULL )
 {
  if ( hWnd != NULL )
  {
   HWND hWndChild=NULL;
   // Get 1st document window
   ::EnumChildWindows( hWnd, EnumChildProc, (LPARAM)&hWndChild );
   if ( hWndChild )
   {
    CComPtr<IHTMLDocument2> spDoc;
    LRESULT lRes;
   
    UINT nMsg = ::RegisterWindowMessage( _T("WM_HTML_GETOBJECT") );
    ::SendMessageTimeout( hWndChild, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes );

    LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, _T("ObjectFromLresult") );
    if ( pfObjectFromLresult != NULL )
    {
     HRESULT hr;
     hr = (*pfObjectFromLresult)( lRes, IID_IHTMLDocument, 0, (void**)&spDoc );
     if ( SUCCEEDED(hr) )
     {
      CComPtr<IDispatch> spDisp;
      CComQIPtr<IHTMLWindow2> spWin;
      spDoc->get_Script( &spDisp );
      spWin = spDisp;
      spWin->get_document( &spDoc.p );
      // Change background color to red
      spDoc->put_bgColor( CComVariant("red") );
     }
    }
   } // else document not ready
  } // else Internet Explorer is not running
  ::FreeLibrary( hInst );
 } // else Active Accessibility is not installed
 CoUninitialize();
}

本文地址:http://com.8s8s.com/it/it2878.htm