實作操作功能表 COM物件

操作功能表延伸模組是實作為內部伺服器之 COM 物件。 操作功能表延伸模組必須實 作 IShellExtInitIContextMenu 介面。 當使用者針對已登錄操作功能表延伸模組之類別的對象顯示操作功能表時,就會具現化操作功能表延伸模組。

實作 IShellExtInit

具現化操作功能表延伸模組 COM 物件之後, 會呼叫 IShellExtInit::Initialize 方法。 IShellExtInit::Initialize 會提供操作功能表延伸模組,其中包含內容功能表所套用之目錄對象的相關數據。

IDataObject 包含CFSTR_DSOBJECTNAMES格式的數據 CFSTR_DSOBJECTNAMES資料格式是包含 DSOBJECTNAMES 結構的 HGLOBAL。 DSOBJECTNAMES 結構包含屬性表延伸模組所套用之目錄對象的相關數據。

IDataObject 也包含CFSTR_DS_DISPLAY_SPEC_OPTIONS格式的數據。 CFSTR_DS_DISPLAY_SPEC_OPTIONS資料格式是包含 DSDISPLAYSPECOPTIONS 結構的 HGLOBAL DSDISPLAYSPECOPTIONS 包含供延伸模組使用的組態數據。

如果從 IShellExtInit::Initialize回S_OK以外的任何值,將不會使用操作功能表延伸模組。

不會使用 IShellExtInit::Initialize 方法的 pidlFolderhkeyProgID 參數。

實作 IContextMenu

在 IShellExtInit::Initialize 傳回之後會呼叫 IContextMenu::QueryContextMenu 方法,以取得操作功能表延伸模組將新增的功能表項或專案。 QueryContextMenu 實作相當簡單。 操作功能表延伸模組會使用 InsertMenuItem 或類似的函式來新增其功能表項。 功能表命令標識碼必須大於或等於 idCmdFirst ,而且必須小於 idCmdLastQueryContextMenu 必須傳回新增至功能表加上一個的最大數值標識碼。 指派功能表命令標識元的最佳方式是從零開始,並依序運作。 如果操作功能表延伸模組不需要任何功能表項,它就不應該將任何專案新增至功能表,並從QueryContextMenu傳回零

系統會呼叫 IContextMenu::GetCommandString 來擷取功能表項的文字數據,例如要顯示功能表項的說明文字。 操作功能表主機可能會使用 Unicode 字串,而擴充功能則使用 ANSI 字串。 因此, 必須個別處理GCS_HELPTEXTAGCS_HELPTEXTWGCS_VERBAGCS_VERBW 案例。 這個方法的實作是選擇性的。

選取操作功能表延伸模組所安裝的其中一個功能表項時,會呼叫 IContextMenu::InvokeCommand 。 操作功能表會執行或起始所需的動作,以回應此方法。