由ATL想起的外殼擴充編程(一)

來源:互聯網
上載者:User

好久沒有給VC知識庫發稿了,實在不好意思,由於前段時間實在太忙所以一直沒有時間閑下心來寫點東西,期間也有不少朋友給我來信討論問題,我很感謝大家對我的支援,我歡迎大家繼續來信,共同交流,共同進步!這次我想和大家一起討論一下 Windows 的 Shell 擴充編程,首先在閱讀以下內容之前我還是推薦大家看一下《COM技術內幕》這本大作,不過即使您沒有有關的基礎知識其實也是無所謂的,因為以下講解是傻瓜式講解。

開發環境

Windows Professional 2000

Microsoft Visual C++ 6.0 + ATL3.0

參考文獻

COM技術內幕

ATL應用與開發指南(第二版)

Windows外殼擴充

Windows外殼擴充的英文名稱為:Windows Shell Extension。Windows外殼擴充是一類特殊的COM對象,在這類COM對象中使用者可以加入自己的特殊功能,而Windows外殼擴充最終都會被Windows Explorer所引用。舉個最簡單的例子,比如 WinRar 應用程式,如果你安裝完 WinRar 後,它會在你的右鍵菜單中加入很多捷徑功能表,如 圖1.1 所示:

圖1.1

而上圖卻僅僅是外殼擴充編程中一種:"Context Menu Handler"。難道外殼擴充也分類嗎?是的,但是不多,並且它們的實現大都一致,總體來說有如下幾種分類:

表(一)

處理器類型 何時觸發 所做處理
Context menu 處理器 當使用者滑鼠右擊檔案或檔案夾時觸發。但是在Shell V4.71+中,使用者在檔案夾目錄的空白處點擊滑鼠右鍵也會觸發該事件。 加入操作功能表項目。
Property sheet 處理器 當使用者滑鼠右擊檔案,選擇檔案"屬性"菜單彈出檔案屬性對話方塊時觸發。 加入使用者自訂屬性頁。
Drag and drop 處理器 當使用者在檔案夾或案頭中用滑鼠右鍵Drag/Drop檔案或檔案夾時觸發。 加入操作功能表項目。
Drop處理器 當某一資料對象被Drag Over/Dropped Into某一檔案時觸發。 加入任何使用者自訂動作。
QueryInfo 處理器(Shell V4.71+) 當使用者滑鼠滑過某一個檔案或某一Shell對象時觸發。 加入使用者自訂提示資訊(ToolTips)。

也許有人會問我實現它們困難嗎?答案是:比較簡單。實現它是不是必須得去看那些枯燥乏味的ATL模板類,或者生硬死板的 MFC 宏定義呢?答案是否定的。也許以上的問題阻礙了大多數COM初學者的學習慾望,其實我剛接觸ATL時多的是迷惘,常常抱怨 ATL 的知識太深奧,MFC的構架太生硬,一般我是不太喜歡用#define來定義程式的全部(請參閱 effective C++)。言歸正傳,我們再回到今天的話題上來,那麼為實現 圖1.1 所示功能可以通過哪些途徑呢?答案有二,第一:註冊表編程。第二:Shell Extension COM編程。通過註冊表方式實現其實十分簡單,請參閱 COM 組件註冊表實現,在這裡本文不做重複介紹,再者也不是本文的主題所在。在以下的內容中我會以第一類 Shell 擴充編程---" Context Menu 處理器" 為例來講解 Handler 的實現過程。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.