Numéro d'article: 249232 - Dernière mise à jour: mercredi 27 septembre 2006 - Version: 3.0

Comment obtenir IHTMLDocument2 à partir d'un HWND

A noterCet article s'applique à un système d'exploitation différent de celui que vous utilisez. Le contenu de l'article qui ne vous concerne peut-être pas est désactivé.
Agrandir tout | Réduire tout

Résumé

Cet article montre comment obtenir l'interface IHTMLDocument2 à partir d'un HWND. Microsoft Active Accessibility (MSAA) est installé, vous pouvez envoyer le message WM_HTML_GETOBJECT à la fenêtre du document (avec la classe de fenêtre "Internet Explorer_Server"), 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ées sur le système pour le code décrit dans cette section pour travailler. Les développeurs de client peuvent utiliser le Kit de développement logiciel (SDK) pour développer et mettre à jour Active Accessibility aides. 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 le RDK pour les 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 Active Accessibility et où télécharger le Kit de développement logiciel (SDK) Active Accessibility.
#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 Internet Explorer 5.5, trames ont été mises en oeuvre en hébergeant une nouvelle instance de Shdocvw.dll et chaque cadre avait une fenêtre distincte qui lui sont associée. Internet Explorer 5.5 implémente des frames natifs pour obtenir de meilleures performances, et toutes les images sont rendues par la même instance de Shdocvw.dll. Dans la mesure où il ne pas y avoir un HWND pour chaque trame pour Internet Explorer 5.5 et versions ultérieures, l'exemple de code décrite dans cette section fonctionnera d'accéder au document de la fenêtre principale uniquement. Vous pouvez toujours accéder à document du chaque image à l'aide de la collection frames du document principal.

Références

Le Kit de développement pour les développeurs et RDK, qui installe les composants d'exécution Active Accessibility sur le système d'exploitation, la peuvent être téléchargé à partir le site Web de Microsoft suivant :
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)
Pour plus d'informations sur la prise en charge Microsoft Active Accessibility fournie par le composant MSHTML de Microsoft Internet Explorer, reportez-vous à du site Web suivante :
http://msdn.microsoft.com/workshop/browser/accessibility/overview/overview.asp (http://msdn.microsoft.com/workshop/browser/accessibility/overview/overview.asp)
Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
176792  (http://support.microsoft.com/kb/176792/ ) Comment faire pour se connecter à une instance en cours d'exécution d'Internet Explorer

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Internet Explorer 4.0 Édition 128 bits
  • 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
Mots-clés : 
kbmt kbhowto kbmshtml kbwebbrowser KB249232 KbMtfr
Traduction automatiqueTraduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 249232  (http://support.microsoft.com/kb/249232/en-us/ )
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.
Retired KB ArticleExclusion 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.