如何从 HWND 获取 IHTMLDocument2

文章翻译 文章翻译
文章编号: 249232 - 查看本文应用于的产品
展开全部 | 关闭全部

概要

本文介绍如何从 HWND 的 IHTMLDocument2 接口。如果安装了 Microsoft 活动辅助功能 (MSAA),可以将 WM_HTML_GETOBJECT 消息发送到文档的窗口 (与窗口的类"互联网 Explorer_Server"),然后将从发送的结果传递给 MSAA 函数中, ObjectFromLresult,以获得完全的已封送的 IHTMLDocument2 指针。

更多信息

您必须具有活动辅助功能来处理该节中所述的代码的系统上安装的组件。客户端开发人员可以使用 SDK 来开发和更新活动辅助功能的帮助。如果您合并活动辅助功能的最新版本和分发您的辅助功能的新版本,则必须对已开发的 Microsoft Windows 95、 Windows 98 中或与 Service Pack 4 或 5 的 Windows NT 4.0 的客户端分发运行时组件 (RDK)。没有必要包括适用于客户端开发的专用于 Windows 2000 或 Windows NT 4.0 服务包 6 RDK。这些操作系统的系统中已包含了新的组件。

请参阅有关活动辅助功能以及在哪里可以下载活动的可访问性 SDK 信息本文的"参考"部分。
#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) )
					{
						// 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();
}
				
注:Internet Explorer 5.5 中,框架通过承载的 Shdocvw.dll,新实例实现前后每个框架有一个单独的窗口,与之相关联。Internet Explorer 5.5 实现本机框架,为了提高性能,并且所有帧都呈现 Shdocvw.dll 的同一个实例。因为不会为 Internet Explorer 5.5 及更高版本的每个帧的 HWND,本节中介绍的代码示例将努力获取的主窗口的文档。仍然可以使用主文档的框架集合的每个框架的文档。

参考

为开发人员提供的 SDK 和 RDK,从而安装到系统上的活动辅助功能运行时组件,可以下载从下列 Microsoft Web 站点:
http://www.microsoft.com/downloads/details.aspx?FamilyID=9b14f6e1-888a-4f1d-b1a1-da08ee4077df&DisplayLang=en
有关 Microsoft Internet Explorer 的 MSHTML 组件提供的 Microsoft 活动辅助功能支持的信息,请访问下面的网站:
有关活动辅助功能支持
有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
176792如何连接到 Internet Explorer 的正在运行的实例

属性

文章编号: 249232 - 最后修改: 2013年5月30日 - 修订: 4.0
这篇文章中的信息适用于:
  • Microsoft Internet Explorer 4.01 Service Pack 1
关键字:?
kbhowto kbmshtml kbwebbrowser kbmt KB249232 KbMtzh
机器翻译
重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。
点击这里察看该文章的英文版: 249232
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。
不再更新的 KB 内容免责声明
本文介绍那些 Microsoft 不再提供支持的产品。因此本文按“原样”提供,并且不再更新。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com