Como obter o IHTMLDocument2 de uma HWND

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
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
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 accessvoid 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:Para obter informações sobre o suporte do Microsoft Active Accessibility fornecido pelo componente MSHTML do Microsoft Internet Explorer, visite o seguinte Web site: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
hwnd de modelo de objecto de documento de Active accessibility

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 249232 - Última Revisão: 12/05/2015 18:00:51 - Revisão: 4.0

Microsoft Internet Explorer 4.01 Service Pack 1

  • kbnosurvey kbarchive kbhowto kbmshtml kbwebbrowser kbmt KB249232 KbMtpt
Comentários
ERROR: at System.Diagnostics.Process.Kill() at Microsoft.Support.SEOInfrastructureService.PhantomJS.PhantomJSRunner.WaitForExit(Process process, Int32 waitTime, StringBuilder dataBuilder, Boolean isTotalProcessTimeout)