Como obter IHTMLDocument2 de um HWND.

Traduções deste artigo Traduções deste artigo
ID do artigo: 249232 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Sumário

Este artigo mostra como obter a interface IHTMLDocument2 de um HWND. Se o Microsoft Active Accessibility (MSAA) estiver instalado, você 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 SendMessage para uma função MSAA, ObjectFromLresult, para obter um ponteiro IHTMLDocument2 totalmente empacotado.

Mais Informações

Você deve ter componentes Active Accessibility instalados no sistema para o código descrito nesta seção para trabalhar. Os desenvolvedores do cliente podem usar o SDK para desenvolver e atualizar os recursos de acessibilidade ativa. Se você incorporar a versão mais recente do Active Accessibility e distribuir novas versões de seus recursos de acessibilidade, você deve distribuir os componentes de tempo de execução (RDK) para clientes que foram desenvolvidos para Microsoft Windows 95, Windows 98 ou Windows NT 4.0 com Service Pack 4 ou 5. Não é necessário incluir a RDK para clientes desenvolvidos exclusivamente para o Windows 2000 ou do 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 onde baixar o SDK de acessibilidade ativa e a acessibilidade ativa.
#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 do Internet Explorer 5.5, quadros foram implementados pela hospedagem 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 do Shdocvw. dll. Desde que não haja um HWND para cada quadro para o Internet Explorer 5.5 e posterior, o código de exemplo descrito nesta seção funcionará para acessar o documento da janela principal. Você ainda pode obter documento de 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 de acessibilidade ativa no sistema operacional, podem ser baixado do seguinte 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 de acessibilidade ativa Microsoft fornecido pelo componente MSHTML do Microsoft Internet Explorer, visite o seguinte site da Web:
Sobre o suporte de acessibilidade ativa
Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
176792Como se conectar a uma instância em execução do Internet Explorer

Propriedades

ID do artigo: 249232 - Última revisão: quinta-feira, 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 pelo software de tradução automática da Microsoft e eventualmente pode ter sido editado pela Microsoft Community através da tecnologia Community Translation Framework (CTF) ou por um tradutor profissional. A Microsoft oferece artigos traduzidos automaticamente por software, por tradutores profissionais e editados pela comunidade para que você tenha acesso a todos os artigos de nossa Base de Conhecimento em diversos idiomas. No entanto, um artigo traduzido pode conter erros de vocabulário, sintaxe e/ou gramática. A Microsoft não é responsável por qualquer inexatidão, erro ou dano causado por qualquer tradução imprecisa do conteúdo ou por seu uso pelos nossos clientes.
Clique aqui para ver a versão em Inglês deste artigo: 249232
Aviso 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.

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