ID Artikel: 249232 - Kajian Terakhir: 21 September 2011 - Revisi: 2.0

Bagaimana untuk mendapatkan IHTMLDocument2 dari HWND

Tips SistemThis article applies to a different operating system than the one you are using. Article content that may not be relevant to you is disabled.
Perbesar semua | Perkecil semua

RINGKASAN

Artikel ini menunjukkan bagaimana untuk mendapatkan antarmuka IHTMLDocument2 dari HWND. Jika Microsoft aktif aksesibilitas (MSAA) diinstal, Anda dapat mengirim pesan WM_HTML_GETOBJECT ke dokumen jendela (dengan kelas jendela "Internet Explorer_Server") dan kemudian lulus hasil dari SendMessage untuk fungsi MSAA, ObjectFromLresult, untuk mendapatkan sepenuhnya marshaled IHTMLDocument2 pointer.

INFORMASI LEBIH LANJUT

Anda harus memiliki aksesibilitas aktif komponen diinstal pada sistem untuk kode yang dijelaskan dalam bagian ini untuk bekerja. Klien pengembang dapat menggunakan SDK untuk mengembangkan dan memperbarui aktif aksesibilitas aids. Jika Anda memasukkan versi terbaru dari aktif aksesibilitas dan mendistribusikan versi baru aksesibilitas AIDS, Anda harus mendistribusikan runtime komponen (RDK) untuk klien yang telah dikembangkan untuk Microsoft Windows 95, Windows 98, atau Windows NT 4.0 dengan Service Pack 4 atau 5. Hal ini tidak diperlukan untuk menyertakan RDK untuk klien dikembangkan semata-mata untuk Windows 2000, atau Windows NT 4.0 dengan Service Pack 6. Komponen baru sudah termasuk dalam sistem operasi ini.

Lihat bagian "Referensi" dari artikel ini untuk informasi tentang aksesibilitas aktif dan di mana untuk mendownload SDK aksesibilitas aktif.
#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();
}
				
CATATAN: Sebelum Internet Explorer 5.5, frame dilaksanakan oleh hosting contoh baru dari Shdocvw.dll, dan setiap bingkai memiliki jendela terpisah yang terkait dengannya. Internet Explorer 5.5 mengimplementasikan asli bingkai untuk performa yang lebih baik, dan semua bingkai yang diberikan oleh contoh sama Shdocvw.dll. Karena tidak akan HWND untuk setiap bingkai untuk Internet Explorer 5.5 dan kemudian, kode contoh yang dijelaskan dalam bagian ini akan bekerja untuk mendapatkan dokumen jendela utama hanya. Anda masih bisa mendapatkan setiap bingkai dokumen dengan menggunakan frame koleksi dokumen utama.

REFERENSI

SDK pengembang dan RDK, yang menginstal komponen runtime aktif aksesibilitas ke sistem operasi, dapat didownload dari Website Microsoft berikut:
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)
Untuk informasi tentang dukungan Microsoft aktif aksesibilitas yang disediakan oleh komponen MSHTML Microsoft Internet Explorer, kunjungi Website berikut ini:
http://MSDN.Microsoft.com/Workshop/browser/Accessibility/Overview/Overview.asp (http://msdn.microsoft.com/workshop/browser/accessibility/overview/overview.asp)
Untuk informasi selengkapnya, klik nomor artikel berikut untuk melihat artikel di Pangkalan Pengetahuan Microsoft:
176792  (http://support.microsoft.com/kb/176792/ ) Cara menyambung ke contoh menjalankan Internet Explorer

Berlaku bagi:
  • Microsoft Internet Explorer 4.01 Service Pack 1
Kata kunci: 
kbhowto kbmshtml kbwebbrowser kbmt KB249232 KbMtid
Penerjemahan MesinPenerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:249232  (http://support.microsoft.com/kb/249232/en-us/ )
Retired KB ArticleSanggahan Konten KB yang Tidak Lagi Diperbarui
Artikel ini berisi tentang produk yang tidak lagi didukung oleh Microsoft. Oleh karena itu, artikel ini disajikan ?sebagaimana adanya? dan tidak akan diperbarui.