當使用者在檔案總管中右鍵點擊檔案或資料夾時,系統會顯示上下文菜單。除了系統預設的「剪切」、「複製」等項目,開發者可以透過實作 Context Menu Handler (上下文菜單處理器),為特定檔案類型動態添加自訂菜單命令。
IUnknown 外,必須實作 IShellExtInit (初始化) 與 IContextMenu (核心菜單操作) 介面。IContextMenu2、IContextMenu3 以支援自繪菜單項。IShellExtInit::Initialize 初始化處理器 (傳入選取項的 PIDL 或路徑)。IContextMenu::QueryContextMenu,傳入 HMENU 句柄,處理器在此添加自訂菜單項。GetCommandString 取得說明文字顯示在狀態列。InvokeCommand 執行對應操作。在該方法中,使用 InsertMenu 或 InsertMenuItem 將命令加入 HMENU,並回傳添加的命令 ID 範圍 (以 MAKE_HRESULT 封裝)。需注意命令 ID 的偏移計算與菜單項的狀態設置 (如預設、啟用/停用)。
編譯生成 DLL 後,需以 regsvr32.exe 註冊。在登錄檔 HKEY_CLASSES_ROOT\\<FileType>\\shellex\\ContextMenuHandlers 下建立子鍵,預設值設為元件的 CLSID。如此,該檔案類型的右鍵菜單即會包含你的擴展命令。