Как получить IHTMLDocument2 из HWND

Переводы статьи Переводы статьи
Код статьи: 249232 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

Аннотация

В данной статье показано, как получить интерфейс IHTMLDocument2 из HWND. Если установлен Microsoft Active Accessibility (MSAA), можно отправить сообщение WM_HTML_GETOBJECT окно документа (с классом окна «Интернет Explorer_Server») и затем передает результат из SendMessage функция MSAA, ObjectFromLresult, полностью упакованные указатель IHTMLDocument2.

Дополнительная информация

Должны быть установлены в системе для кода, описанные в данном разделе для работы компоненты Active Accessibility. Разработчики клиентских SDK можно использовать для разработки и обновления активных вспомогательных средств. Если включить последнюю версию Active Accessibility и распространения новых версий вспомогательных средств, необходимо распределить компоненты среды выполнения (ПАКЕТА) для клиентов, которые были разработаны для Microsoft Windows 95, Windows 98 или Windows NT 4.0 с пакетом обновления 4 или 5. Это необходимо для включения ПАКЕТА для клиентов, разработанных исключительно для Windows 2000 или для Windows NT 4.0 с пакетом обновления 6. Новые компоненты, уже включены в этих операционных системах.

Обратитесь к разделу «Ссылки» в данной статье сведения о Active Accessibility и загрузка Active 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();
}
				
Примечание: До Internet Explorer 5.5 кадры были реализованы путем размещения нового экземпляра Shdocvw.dll, и каждый кадр имеет отдельное окно, связанное с ним. Internet Explorer 5.5 реализует кадры машинного кода для улучшения производительности и все кадры воспроизводятся в том же экземпляре Shdocvw.dll. Так как не будет HWND для каждого кадра для Internet Explorer 5.5 и более поздних версиях, примеры кода, описанные в этом разделе будет работать для получения документов в главном окне. По-прежнему можно получить для каждого фрейма документа с помощью коллекции рамки основного документа.

Ссылки

Пакет SDK для разработчиков и ПАКЕТА, который устанавливает компоненты среды выполнения Active Accessibility операционной системе, можно загрузить с веб-узла корпорации Майкрософт:
http://www.Microsoft.com/downloads/details.aspx?FamilyId=9b14f6e1-888a-4f1d-b1a1-da08ee4077df&displaylang=en
Сведения о Microsoft Active Accessibility, предоставляемый компонентом MSHTML Microsoft Internet Explorer посетите следующий веб-узел:
Об активной поддержки специальных возможностей
Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
176792Как подключиться к запущенному экземпляру обозревателя Internet Explorer

Свойства

Код статьи: 249232 - Последний отзыв: 10 сентября 2012 г. - Revision: 6.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Internet Explorer 4.01 Service Pack 1
Ключевые слова: 
kbhowto kbmshtml kbwebbrowser kbmt KB249232 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке: 249232
Заявление об отказе относительно содержимого статьи о продуктах, поддержка которых прекращена
Эта статья содержит сведения о продуктах, поддержка которых корпорацией Майкрософт прекращена. Поэтому она предлагается как есть и обновляться не будет.

Отправить отзыв

 

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