下面首先介紹一個比較常用的外殼擴展應用:上下文相關菜單,在windows中,用鼠標右鍵單擊文件或者文件夾時彈出的那個菜單便稱為上下文相關菜單。要動態地在上下文相關菜單中增添菜單項,可以通過寫context menu handler來實現。比如大家所熟悉的winzip和ultraedit等軟件都是通過編寫context menu handler來動態地向菜單中增添菜單項的。如果系統中安裝了winzip,那麼當用右鍵單擊一個名為windows的文件(夾)時,其上下文相關菜單就會有一個名為add to Windows.zip的菜單項。
本文要實現的context menu handler與winzip提供的上下文菜單相似。它將在任意類型的文件對象的上下文相關菜單中添加一個 文件操作菜單項,當點擊該項後,接口程序就會彈出一個文件操作窗口,執行文件拷貝、移動等操作.編寫context menu handler必須實現ishellextinit、icontextmenu和tcomobjectfactory三個接口。ishellextinit實現
接口的初始化,icontextmenu接口對象實現上下文相關菜單,icomobjectfactory接口實現對象的創建。
下面來介紹具體的程序實現。首先在Delphi中點擊菜單的 file|new 項,在new item窗口中選擇dll建立一個dll工程文件。然後點擊菜單的 file|new 項,在new item窗口中選擇unit建立一個unit文件,點擊點擊菜單的 file|new 項,在new item窗口中選擇form建立一個新的窗口。將將工程文件保存為contextmenu.dpr ,將unit1保存為contextmenuhandle.pas,將form保存為opwindow.pas。
contextmenu.dpr的程序清單如下:
library contextmenu;
uses
comserv,
contextmenuhandle in 'contextmenuhandle.pas',
opwindow in 'opwindow.pas' {form2};
exports
dllgetclassobject,
dllcanunloadnow,
dllregisterserver,
dllunregisterserver;
{$r *.tlb}
{$r *.res}
begin
end.