Como obter o IHTMLDocument2 de uma HWND

Traduções de Artigos Traduções de Artigos
Artigo: 249232 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Sumário

Este artigo mostra como pode obter a interface IHTMLDocument2 de um HWND. Se o Microsoft Active Accessibility (MSAA) estiver instalado, pode enviar a mensagem WM_HTML_GETOBJECT a janela do documento (com a classe de janela, "Internet Explorer_Server") e, em seguida, passar o resultado de EnviarMensagem para uma função MSAA, ObjectFromLresult, para obter um apontador de IHTMLDocument2 totalmente cujas referências foram empacotado.

Mais Informação

Tem de ter componentes Active Accessibility instalados no sistema para o código descrito nesta secção para trabalhar. Os programadores de cliente podem utilizar o SDK para desenvolver e actualizar auxiliares de acessibilidade activas. Se incorporar a versão mais recente de Active Accessibility e distribuir novas versões das ajudas de acessibilidade, tem de distribuir os componentes de runtime (RDK) para clientes que tenham sido desenvolvidos para Microsoft Windows 95, Windows 98 ou Windows NT 4.0 com Service Pack 4 ou 5. Não é necessário incluir o RDK para clientes desenvolvidos exclusivamente para o Windows 2000 ou Windows NT 4.0 com Service Pack 6. Os novos componentes já estão incluídos nestes sistemas operativos.

Consulte a secção "Referências" deste artigo para obter informações sobre o Active Accessibility e onde transferir o SDK de acessibilidade activas.
#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();
}
				
Nota: Antes do Internet Explorer 5.5, molduras foram implementadas alojando uma nova instância do Shdocvw. dll e cada pacote tinha uma janela separada, ela associados. Internet Explorer 5.5 implementa frames nativos para um melhor desempenho e a todos os pacotes são compostos pela mesma instância do Shdocvw. dll. Uma vez que não haverá um HWND para cada frame do Internet Explorer 5.5 e posterior, o código de exemplo descrito nesta secção irá funcionar para ir para o documento da janela principal apenas. Pode ainda obter documento de cada pacote utilizando a colecção de pacotes do documento principal.

Referências

O SDK para programadores e RDK, que instala os componentes de runtime de Active Accessibility para o sistema operativo, podem ser transferido o seguinte Web site da Microsoft:
http://www.microsoft.com/downloads/details.aspx?FamilyId=9b14f6e1-888a-4f1d-B1A1-da08ee4077df&displaylang=en
Para obter informações sobre o suporte do Microsoft Active Accessibility fornecido pelo componente MSHTML do Microsoft Internet Explorer, visite o seguinte Web site:
Acerca do suporte de Active Accessibility
Para mais informações, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:
176792Como ligar a uma instância do Internet Explorer em execução

Propriedades

Artigo: 249232 - Última revisão: 30 de maio de 2013 - Revisão: 4.0
A informação contida neste artigo aplica-se a:
  • Microsoft Internet Explorer 4.01 Service Pack 1
Palavras-chave: 
kbhowto kbmshtml kbwebbrowser kbmt KB249232 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 249232
Exclusão de Responsabilidade para Conteúdo sem Suporte na KB
Este artigo foi escrito sobre produtos para os quais a Microsoft já não fornece suporte. Por conseguinte, este artigo é oferecido "tal como está" e deixará de ser actualizado.

Submeter comentários

 

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