ID do artigo: 249232 - Última revisão: quarta-feira, 27 de setembro de 2006 - Revisão: 3.0

Como obter IHTMLDocument2 de um HWND

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Recolher tudo

Sumário

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

Mais Informações

Você deve ter acessibilidade ativa componentes instalados no sistema para o código descrito nesta seção para trabalhar. Os desenvolvedores de cliente podem usar o SDK para desenvolver e atualizar auxílios de acessibilidade ativa. Se você incorporar a versão mais recente de acessibilidade ativa e distribuir novas versões de auxílios de acessibilidade, você deve distribuir os componentes de tempo de execução (RDK) para clientes que foram desenvolvidos para o 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 somente para Windows 2000 ou para Windows NT 4.0 com Service Pack 6. Os novos componentes já estão incluídos nesses sistemas operacionais.

Consulte a seção "Referências" deste artigo para obter informações sobre acessibilidade ativa e onde baixar o SDK acessibilidade Active.
#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();
}
				
Observação: antes Internet Explorer 5.5, quadros foram implementados por que hospeda uma nova instância do Shdocvw.dll e cada quadro tinha uma janela separada associada a ele. Internet Explorer 5.5 implementa quadros nativos para melhorar o desempenho, e todos os quadros são processados pela mesma instância de Shdocvw.dll. Uma vez que não haverá um HWND para cada quadro para o Internet Explorer 5.5 e versões posteriores, o código de exemplo descrito nesta seção funcionará para ir para o documento da janela principal. Você ainda poderá obter a documento do cada quadro usando a coleção de quadros do documento principal.

Referências

O SDK para desenvolvedores e RDK, que instala os componentes de tempo de execução acessibilidade ativa no sistema operacional, poderá ser feito no seguinte site da Microsoft:
http://www.microsoft.com/downloads/details.aspx?FamilyID=9b14f6e1-888a-4f1d-b1a1-da08ee4077df&DisplayLang=en (http://www.microsoft.com/downloads/details.aspx?FamilyID=9b14f6e1-888a-4f1d-b1a1-da08ee4077df&DisplayLang=en)
Para obter informações sobre o suporte de acessibilidade ativa Microsoft fornecido pelo componente MSHTML do Microsoft Internet Explorer, visite o seguinte site da Web:
http://msdn.microsoft.com/workshop/browser/accessibility/overview/overview.asp (http://msdn.microsoft.com/workshop/browser/accessibility/overview/overview.asp)
Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
176792  (http://support.microsoft.com/kb/176792/ ) Como se conectar a uma instância em execução do Internet Explorer

A informação contida neste artigo aplica-se a:
  • Microsoft Internet Explorer 4.0 Edição de 128 Bits
  • Microsoft Internet Explorer 4.01 Service Pack 2
  • Microsoft Internet Explorer 4.01 Service Pack 1
  • Microsoft Internet Explorer 4.01 Service Pack 2
  • Microsoft Internet Explorer 5.0
  • Microsoft Internet Explorer 5.5
Palavras-chave: 
kbmt kbhowto kbmshtml kbwebbrowser KB249232 KbMtpt
Tradução automáticaTraduçã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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 249232  (http://support.microsoft.com/kb/249232/en-us/ )
Retired KB ArticleAviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.