Artigo: 249232 - Última revisão: quarta-feira, 27 de Setembro de 2006 - Revisão: 3.0

Como obter IHTMLDocument2 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 | Reduzir tudo

Sumário

Este artigo mostra como obter a interface IHTMLDocument2 a partir 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 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 ajudas de acessibilidade do Active Directory. Se incorporar a versão mais recente do Active Accessibility e distribuir novas versões de ajudas de acessibilidade, tem de 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 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 Active Accessibility e onde transferir o SDK acessibilidade Active Directory.
#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, foram implementados pacotes alojando uma nova instância do Shdocvw.dll e cada frame tinha uma janela separada associada. Internet Explorer 5.5 implementa nativos pacotes para um melhor desempenho e todos os pacotes são apresentados pela mesma instância de Shdocvw.dll. Desde aí não serão 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 de documento principal.

Referências

O SDK para programadores e RDK, que instala os componentes de tempo de execução de Active Accessibility para o sistema operativo, podem ser transferido a partir do seguinte Web 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 do Microsoft Active Accessibility fornecido pelo componente MSHTML do Microsoft Internet Explorer, visite o seguinte Web site:
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 de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
176792  (http://support.microsoft.com/kb/176792/ ) Como ligar a uma instância do Internet Explorer em execução

A informação contida neste artigo aplica-se a:
  • Microsoft Internet Explorer 4.0 128-Bit Edition
  • 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 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  (http://support.microsoft.com/kb/249232/en-us/ )
Retired KB ArticleExclusã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.