文章編號: 249232 - 上次校閱: 2006年9月27日 - 版次: 3.0

如何從一個 HWND 取得 IHTMLDocument2

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
全部展開 | 全部摺疊

結論

本文將示範如何從一個 HWND 取得 IHTMLDocument2 介面。如果安裝 Microsoft Active 協助工具 (MSAA) 您可以將 WM_HTML_GETOBJECT 訊息傳送給文件的視窗 (具有視窗類別 」 網際網路 Explorer_Server 」),然後在 MSAA 函式時,ObjectFromLresult,取得完全封送處理的 IHTMLDocument2 指標的從 SendMessage 將結果。

其他相關資訊

您必須有安裝使用本節所述的程式碼在系統上的使用中的協助工具元件。用戶端開發人員可以使用 SDK 來開發及更新使用中的協助工具輔助工具。如果您將最新版本的使用中的協助工具,並散佈新版本的協助工具輔助您必須散發執行階段元件 (RDK) 開發的 Microsoft Windows 95、 Windows 98 或 Windows NT 4.0 與服務套件 4 或 5 的用戶端。這不是必要的用戶端開發僅針對 Windows 2000 或 Windows NT 4.0 與服務封包 6 包括 [RDK。這些作業系統已經包含新的元件。

請參閱如需有關使用中的協助工具及何處下載使用中的協助工具 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();
}
				
注意: 之前 [網際網路總管 5.5,框架已由裝載 Shdocvw.dll 的新執行個體實作和每個框架有與其相關聯的另一個視窗。網際網路總管 5.5 會實作較佳的效能的原生框架,而且所有的框架會呈現 Shdocvw.dll 同一個執行個體。因為不會為每個框架網際網路總管 5.5 與更新版本的 HWND,本節所述的範例程式碼會運作取得到主視窗的文件中。您仍然可以使用主文件的框架集合來取得每個框架的文件的資訊。

?考

開發人員的 SDK,而且在安裝了使用中的協助工具執行階段元件到操作系統的 RDK 可下載從下列 Microsoft 網站:
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)
Microsoft 使用中的協助工具支援的 Microsoft Internet Explorer MSHTML 元件提供的資訊請造訪下列網站:
http://msdn.microsoft.com/workshop/browser/accessibility/overview/overview.asp (http://msdn.microsoft.com/workshop/browser/accessibility/overview/overview.asp)
如需詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
176792? (http://support.microsoft.com/kb/176792/ ) 如何連線到執行的 Internet Explorer 的執行個體

這篇文章中的資訊適用於:
  • Microsoft Internet Explorer 4.0 128-Bit Edition
  • 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
關鍵字:?
kbmt kbhowto kbmshtml kbwebbrowser KB249232 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:249232? (http://support.microsoft.com/kb/249232/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。
Retired KB Article依現狀不再更新的知識庫內容免責聲明
本文旨在說明 Microsoft 不再提供支援的產品。因此,本文係依「現狀」提供,不會再更新。