如何從 HWND 取得 IHTMLDocument2

文章翻譯 文章翻譯
文章編號: 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 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 的相同執行個體。不會為每個框架的 Internet Explorer 5.5 及更新版本中的 HWND,這一節所述的範例程式碼會以跳至文件主視窗的作用。您仍然可以使用主文件的框架集合取得到每個框架的文件。

?考

開發人員的 SDK 和 RDK,這樣會安裝作業系統到使用中的協助工具執行階段元件,就可以下載下列 Microsoft 網站:
http://www.microsoft.com/downloads/details.aspx?FamilyID=9b14f6e1-888a-4f1d-b1a1-da08ee4077df&DisplayLang=en
如需有關 Microsoft Internet Explorer 的 MSHTML 元件所提供的 Microsoft 作用中的協助工具支援的資訊,請造訪下列網站:
有關使用中的網頁可及性支援
如需詳細資訊,按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
176792如何連線到 Internet Explorer 的一個執行執行個體

屬性

文章編號: 249232 - 上次校閱: 2013年5月30日 - 版次: 4.0
這篇文章中的資訊適用於:
  • Microsoft Internet Explorer 4.01 Service Pack 1
關鍵字:?
kbhowto kbmshtml kbwebbrowser kbmt KB249232 KbMtzh
機器翻譯
請注意--重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,且可能由 Microsoft Community 利用 Community Translation Framework技術或人工進行事後編修。翻譯過程並無專業譯者參與。Microsoft 同時提供使用者人為翻譯、機器翻譯及社群編修後的機器翻譯三種版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,所有翻譯文章都可能不盡完美,內容都可能出現詞彙、語意或文法上的錯誤。就翻譯內容之不正確或錯誤,或客戶因使用翻譯內容所產生的任何損害,微軟不負擔任何責任。Microsoft將依合理的商業努力不斷地更新機器翻譯軟體和工具,以期能為使用者提供更好的服務。
按一下這裡查看此文章的英文版本:249232
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。
依現狀不再更新的知識庫內容免責聲明
本文旨在說明 Microsoft 不再提供支援的產品。因此,本文係依「現狀」提供,不會再更新。

提供意見

 

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