如何從 HWND 取得 IHTMLDocument2

請注意--重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,且可能由 Microsoft Community 利用 Community Translation Framework技術或人工進行事後編修。翻譯過程並無專業譯者參與。Microsoft 同時提供使用者人為翻譯、機器翻譯及社群編修後的機器翻譯三種版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,所有翻譯文章都可能不盡完美,內容都可能出現詞彙、語意或文法上的錯誤。就翻譯內容之不正確或錯誤,或客戶因使用翻譯內容所產生的任何損害,微軟不負擔任何責任。Microsoft將依合理的商業努力不斷地更新機器翻譯軟體和工具,以期能為使用者提供更好的服務。

按一下這裡查看此文章的英文版本:249232
本文已封存。本文係以「現狀」提供且不會再更新。
結論
本文章顯示如何從 HWND 取得 IHTMLDocument2 介面。如果已安裝 Microsoft 使用協助工具 (MSAA),可以將 WM_HTML_GETOBJECT 訊息傳送至文件的視窗 (具有視窗類別"網際網路 Explorer_Server"),並從 SendMessage 將結果傳遞至 MSAA 函式時, ObjectFromLresult,以取得完整封送處理過的 IHTMLDocument2 指標。
其他相關資訊
您必須安裝在要使用這一節所述的程式碼的系統上的作用中的協助工具元件。用戶端開發人員可以使用 SDK 來開發及更新使用中的協助工具輔助。如果您將使用中的協助工具的最新版本和散發您的協助工具的最新版本時,就必須散發的執行階段元件 (RDK) 已開發出 Microsoft Windows 95、 Windows 98 或 Windows NT 4.0 Service Pack 4 或 5 的用戶端。您不需要為用戶端開發僅供 Windows 2000 或 Windows NT 4.0 Service Pack 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 accessvoid 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 的相同執行個體。不會為每個框架的 Internet Explorer 5.5 及更新版本中的 HWND,這一節所述的範例程式碼會以跳至文件主視窗的作用。您仍然可以使用主文件的框架集合取得到每個框架的文件。
参考
開發人員的 SDK 和 RDK,這樣會安裝作業系統到使用中的協助工具執行階段元件,就可以下載下列 Microsoft 網站:如需有關 Microsoft Internet Explorer 的 MSHTML 元件所提供的 Microsoft 作用中的協助工具支援的資訊,請造訪下列網站:如需詳細資訊,按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
176792如何連線到 Internet Explorer 的一個執行執行個體
使用中的協助工具的文件物件模型 hwnd

警告:本文為自動翻譯

內容

文章識別碼:249232 - 最後檢閱時間:12/05/2015 18:00:54 - 修訂: 4.0

Microsoft Internet Explorer 4.01 Service Pack 1

  • kbnosurvey kbarchive kbhowto kbmshtml kbwebbrowser kbmt KB249232 KbMtzh
意見反應