運(yùn)行調(diào)試Visual Studio 2005程序
Visual Studio 2005程序包括許多新的和改進(jìn)的用于提高工作效率的功能。Visual Studio 2005程序還進(jìn)行了重新設(shè)計(jì),從而向開發(fā)人員提供對(duì).NET Framework 組件的直接訪問(wèn),因此可以在使用的過(guò)程當(dāng)中感受到趣味性和吸引力。
創(chuàng)建一個(gè)簡(jiǎn)單的“瀏覽器幫助程序?qū)ο蟆?BHO),即實(shí)現(xiàn) IObjectWithSite 接口并將其自身附加到 Internet Explorer 的一種“組件對(duì)象模型”(COM) 對(duì)象。本文逐步說(shuō)明了如何創(chuàng)建入門級(jí) BHO。首先,BHO 會(huì)在 Internet Explorer 加載文檔時(shí)顯示消息“大家好!”。然后,BHO 被擴(kuò)展為從已加載頁(yè)面刪除圖像。本文面向的是想要了解如何擴(kuò)展瀏覽器功能以及如何為 Internet Explorer 創(chuàng)建 Web 開發(fā)人員工具的開發(fā)人員(本文還包含指向英文網(wǎng)頁(yè)的鏈接)。
簡(jiǎn)介
本文憑借 Visual Studio 2005程序和“活動(dòng)模板庫(kù)”(ATL) 來(lái)開發(fā)使用 C++ 的 BHO。我們之所以決定使用 ATL,是因?yàn)樗奖愕貙?shí)現(xiàn)了我們可以按需進(jìn)行擴(kuò)展的基本樣板。還有其他方法可供用于創(chuàng)建 BHO(例如,使用“Microsoft 基礎(chǔ)類”(MFC) 或 Win32 API 和 COM),但 ATL 是為我們自動(dòng)處理許多細(xì)節(jié)的輕型庫(kù),包括建立含有 BHO 類標(biāo)識(shí)符 (CLSID) 的注冊(cè)表。
ATL 的另一個(gè)優(yōu)勢(shì)在于它的 COM 感知智能指針類(例如,CComPtr 和 CComBSTR),這些類可管理 COM 對(duì)象的生命周期。例如,CComPtr 在賦值時(shí)會(huì)調(diào)用 AddRef,而在對(duì)象被銷毀或超出范圍時(shí)會(huì)調(diào)用 Release。智能指針簡(jiǎn)化了代碼并且有助于避免內(nèi)存泄漏。當(dāng)在單個(gè)方法范圍內(nèi)使用時(shí),它們的穩(wěn)定性和可靠性尤為有用。
本文的***部分向您逐步介紹了如何實(shí)現(xiàn)簡(jiǎn)單的 BHO 并驗(yàn)證它是否由 Internet Explorer 加載。接下來(lái)的部分將說(shuō)明如何將 BHO 連接到瀏覽器事件,***一部分將介紹與更改網(wǎng)頁(yè)外觀的 DHTML 文檔對(duì)象模型 (DOM) 的簡(jiǎn)單交互。
概述
到底什么是Visual Studio 2005程序對(duì)象 (BHO)?簡(jiǎn)言之,BHO 是將自定義功能添加到 Internet Explorer 的輕型 DLL 擴(kuò)展。BHO 還可以將功能添加到 Windows 資源管理器外殼程序(盡管這并不常見,也不是本文重點(diǎn))。#t#
BHO 通常并不提供其自身的任何用戶界面 (UI)。它們而是通過(guò)在后臺(tái)響應(yīng)瀏覽器事件和用戶輸入數(shù)據(jù)來(lái)發(fā)揮作用。例如,BHO 可以攔截彈出窗口、自動(dòng)填充窗體或?yàn)槭髽?biāo)手勢(shì)添加支持。有一種常見誤解認(rèn)為工具欄擴(kuò)展項(xiàng)需要 BHO;但如果將 BHO 與工具欄配合使用,則可以實(shí)現(xiàn)更豐富的用戶體驗(yàn)。注意 BHO 對(duì)于最終用戶和開發(fā)人員同樣都是便捷的工具;但由于 BHO 被賦予了對(duì)瀏覽器和 Web 內(nèi)容的相當(dāng)大的控制能力,并且它們通常都處于未檢測(cè)的狀態(tài),因此用戶應(yīng)十分謹(jǐn)慎地從可靠來(lái)源獲取和安裝 BHO。
BHO 的生命周期與它所交互的瀏覽器實(shí)例的生命周期相等。在 Internet Explorer 6 和早期版本中,這意味著為每個(gè)新的頂層窗口都創(chuàng)建(和銷毀)一個(gè)新 BHO。另一方面,Internet Explorer 7 會(huì)為每個(gè)選項(xiàng)卡都創(chuàng)建和銷毀一個(gè)新 BHO。BHO 不是由承載 WebBrowser 控件的其他應(yīng)用程序加載,也不是由 HTML 對(duì)話框之類的窗口加載。
BHO 的主要要求是實(shí)現(xiàn) IObjectWithSite 接口。此接口提供了一個(gè)方法(即 SetSite),此方法方便了與 Internet Explorer 的初始通信,Visual Studio 2005程序并會(huì)在其將要釋放時(shí)通知 BHO。我們實(shí)現(xiàn)此接口,然后將 BHO 的 CLSID 添加到注冊(cè)表中,由此創(chuàng)建一個(gè)簡(jiǎn)單的瀏覽器擴(kuò)展。