Comment obtenir IHTMLDocument2 à partir d'un HWND

Traductions disponibles Traductions disponibles
Numéro d'article: 249232 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Résumé

Cet article explique comment obtenir l'interface IHTMLDocument2 à partir d'un HWND. Si Microsoft Active Accessibility (MSAA) est installé, vous pouvez envoyer le message WM_HTML_GETOBJECT à la fenêtre de document (avec la classe de fenêtre « Internet Explorer_Server ») et puis passer le résultat de SendMessage à une fonction MSAA, ObjectFromLresult, pour obtenir un pointeur IHTMLDocument2 entièrement marshalé.

Plus d'informations

Vous devez disposer des composants Active Accessibility installés sur le système pour le code décrit dans cette section pour travailler. Les développeurs client peuvent utiliser le SDK pour développer et mettre à jour des outils d'accessibilité Active. Si vous incorporez la dernière version de Active Accessibility et distribuez de nouvelles versions de vos outils d'accessibilité, vous devez distribuer les composants d'exécution (RDK) pour les clients qui ont été développés pour Microsoft Windows 95, Windows 98 ou Windows NT 4.0 avec Service Pack 4 ou 5. Il n'est pas nécessaire d'inclure la version de RDK pour clients développés exclusivement pour Windows 2000 ou Windows NT 4.0 avec Service Pack 6. Les nouveaux composants sont déjà inclus dans ces systèmes d'exploitation.

Consultez la section « Références » de cet article pour plus d'informations sur l'accessibilité Active et où télécharger le SDK d'accessibilité 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();
}
				
Remarque : Avant d'Internet Explorer 5.5, cadres ont été implémentés en hébergeant une nouvelle instance de Shdocvw.dll et chaque image avait une fenêtre distincte qui lui est associée. Internet Explorer 5.5 implémente les frames natifs pour de meilleures performances, et toutes les images sont restituées par la même instance de Shdocvw.dll. Dans la mesure où il y aura pas un HWND pour chaque frame pour Internet Explorer 5.5 et versions ultérieures, l'exemple de code décrite dans cette section fonctionneront pour accéder au document de la fenêtre principale uniquement. Vous pouvez toujours obtenir pour chaque frame du document à l'aide de la collection frames du document principal.

Références

Le Kit de développement pour les développeurs et la version de RDK, qui installe les composants d'exécution Active Accessibility sur le système d'exploitation, peuvent être téléchargé sur le site Web de Microsoft à l'adresse suivante :
http://www.Microsoft.com/downloads/details.aspx?FamilyId=9b14f6e1-888a-4f1d-B1A1-da08ee4077df&displaylang=en
Pour plus d'informations sur la prise en charge Microsoft Active Accessibility fournie par le composant MSHTML de Microsoft Internet Explorer, reportez-vous au site Web suivant :
À propos de la prise en charge Active Accessibility
Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
176792Comment se connecter à une instance d'Internet Explorer

Propriétés

Numéro d'article: 249232 - Dernière mise à jour: jeudi 30 mai 2013 - Version: 4.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Internet Explorer 4.01 Service Pack 1
Mots-clés : 
kbhowto kbmshtml kbwebbrowser kbmt KB249232 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu d'une traduction automatique réalisée par un logiciel Microsoft et non par un traducteur professionnel. Cette traduction automatique a pu aussi être révisée par la communauté Microsoft grâce à la technologie Community Translation Framework (CTF). Pour en savoir plus sur cette technologie, veuillez consulter la page http://support.microsoft.com/gp/machine-translation-corrections/fr. Microsoft vous propose en effet des articles traduits par des professionnels, des articles issus de traductions automatiques et des articles issus de traductions automatiques révisées par la communauté Microsoft, de manière à ce que vous ayez accès à tous les articles de notre Base de connaissances dans votre langue. Il est important de noter que les articles issus de la traduction automatique, y compris ceux révisés par la communauté Microsoft, peuvent contenir des erreurs de vocabulaire, de syntaxe ou de grammaire. Microsoft ne pourra être tenu responsable des imprécisions, erreurs, ainsi que de tout dommage résultant d?une traduction incorrecte du contenu ou de son utilisation par les clients.
La version anglaise de cet article est la suivante: 249232
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
Exclusion de responsabilité concernant les contenus obsolètes dans la Base de connaissances
Cet article concerne des produits pour lesquels Microsoft n'offre plus de support. Il est par conséquent fourni « en l'état » et ne sera plus mis à jour.

Envoyer des commentaires

 

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