您的位置:首页 > Web前端 > HTML

根据Internet Explorer_Server窗口得到IHtmlDocument2接口

2013-05-09 14:54 316 查看
根据Internet Explorer_Server窗口得到IHtmlDocument2接口
作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站
代码很少,自己看

#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();

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: