Come ottenere IHTMLDocument2 da un HWND

Traduzione articoli Traduzione articoli
Identificativo articolo: 249232 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

Sommario

In questo articolo viene illustrato come ottenere l'interfaccia IHTMLDocument2 da un HWND. Se Ŕ installato Microsoft Active Accessibility (MSAA), Ŕ possibile inviare il messaggio WM_HTML_GETOBJECT alla finestra del documento (con la classe finestra "Internet Explorer_Server") e quindi passare il risultato dal SendMessage per una funzione MSAA, ObjectFromLresult, per ottenere un puntatore IHTMLDocument2 completamente il marshalling.

Informazioni

╚ necessario disporre di componenti di Active Accessibility installati nel sistema per il codice descritto in questa sezione per l'utilizzo. Gli sviluppatori di client Ŕ possono utilizzare il SDK per sviluppare e aggiornare gli strumenti di Active Accessibility. Se si incorporano la versione pi¨ recente di Active Accessibility e distribuire nuove versioni di strumenti di accesso facilitato, Ŕ necessario distribuire i componenti di runtime (RDK) per i client che sono stati sviluppati per Microsoft Windows 95, Windows 98 o Windows NT 4.0 con Service Pack 4 o 5. Non Ŕ necessario includere il RDK per i client sviluppati esclusivamente da Windows 2000 o Windows NT 4.0 con Service Pack 6. I nuovi componenti sono giÓ incluse in questi sistemi operativi.

Vedere la sezione "Riferimenti" di questo articolo per informazioni su Active Accessibility e dove scaricare Active Accessibility SDK.
#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: Prima di Internet Explorer 5.5, cornici sono state implementate mediante l'hosting di una nuova istanza di Shdocvw. dll e ogni fotogramma Ŕ una finestra separata associata. Internet Explorer 5.5 implementa frame nativi per ottenere prestazioni migliori e vengono eseguito il rendering di tutti i frame dalla stessa istanza di Shdocvw. dll. PoichÚ non ci sarÓ un HWND per ciascun frame per Internet Explorer 5.5 e versioni successive, il codice di esempio descritto in questa sezione funzionerÓ per il documento della finestra principale. ╚ comunque possibile ottenere al documento di ciascun fotogramma utilizzando l'insieme di fotogrammi del documento principale.

Riferimenti

il SDK per gli sviluppatori e RDK, che consente di installare i componenti di runtime Active Accessibility al sistema operativo, pu˛ essere scaricato dal seguente sito Web Microsoft:
http://www.microsoft.com/downloads/details.aspx?FamilyID=9b14f6e1-888A-4f1d-B1A1-da08ee4077df&displaylang=en
Per informazioni sul supporto di Microsoft Active Accessibility fornito dal componente MSHTML di Microsoft Internet Explorer, visitare il seguente sito Web:
Informazioni sul supporto di Active Accessibility
Per ulteriori informazioni, fare clic sul numero dell'articolo riportato di seguito per visualizzare l'articolo della Microsoft Knowledge Base:
176792Come connettersi a un'istanza di Internet Explorer in esecuzione

ProprietÓ

Identificativo articolo: 249232 - Ultima modifica: giovedý 30 maggio 2013 - Revisione: 4.0
Le informazioni in questo articolo si applicano a:
  • Microsoft Internet Explorer 4.01 Service Pack 1
Chiavi:á
kbhowto kbmshtml kbwebbrowser kbmt KB249232 KbMtit
Traduzione automatica articoli
IMPORTANTE: il presente articolo Ŕ stato tradotto tramite un software di traduzione automatica di Microsoft ed eventualmente revisionato dalla community Microsoft tramite la tecnologia CTF (Community Translation Framework) o da un traduttore professionista. Microsoft offre articoli tradotti manualmente e altri tradotti automaticamente e rivisti dalla community con l?obiettivo di consentire all'utente di accedere a tutti gli articoli della Knowledge Base nella propria lingua. Tuttavia, un articolo tradotto automaticamente, anche se rivisto dalla community, non sempre Ŕ perfetto. Potrebbe contenere errori di vocabolario, di sintassi o di grammatica. Microsoft declina ogni responsabilitÓ per imprecisioni, errori o danni causati da una traduzione sbagliata o dal relativo utilizzo da parte dei clienti. Microsoft aggiorna frequentemente il software e gli strumenti di traduzione automatica per continuare a migliorare la qualitÓ della traduzione.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 249232
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.
Dichiarazione di non responsabilitÓ per articoli della Microsoft Knowledge Base su prodotti non pi¨ supportati
Questo articolo Ŕ stato scritto sui prodotti per cui Microsoft non offre pi¨ supporto. L?articolo, quindi, viene offerto ?cosý come Ŕ? e non verrÓ pi¨ aggiornato.

Invia suggerimenti

 

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