共用方式為


使用殼層延伸模組新增圖示和操作功能表

注意

Windows 桌面搜尋 2.x 是一種過時的技術,原本是 Windows XP 和 Windows Server 2003 的增益集。 在較新版本中,請改用 Windows 搜尋

您可以藉由實作殼層延伸模組,改善使用者使用 Microsoft Windows 桌面搜尋 (WDS) 和通訊協定處理常式的體驗。 如果沒有進一步擴充功能,您建立的通訊協定處理常式將不會包含下列使用者體驗:

  • WDS 不會顯示結果的特定圖示。
  • 當使用者按兩下專案時,使用者介面將不會回應事件。
  • 當使用者以滑鼠右鍵按一下專案時,操作功能表將不支援專案的任何作業。

IShellFolder需要IPersist 和 IPersistFolder的最小實作,ICoNtextMenuIExtractIcon需要IShellFolder的最小實作,這兩個介面可提供更順暢的使用者體驗。

 

IPersist

IPersist介面會定義單一方法GetClassID,其設計目的是提供可以持續儲存在系統中之物件的 CLSID。

方法 描述
GetClassID () 傳回通訊協定處理常式的 ClassID

 

注意

應該針對IPersist、IPersistFolderIShellFolder實作相同的 CLSID。

 

 

IPersistFolder

IPersistFolder介面是用來初始化 Shell 資料夾物件。 這個介面的實作是衍生自 IPersist的實作,是資料夾在 Shell 命名空間中的告知位置的方式。

方法 描述
Initialize () 指示 Shell 資料夾物件根據傳遞的資訊初始化本身,並傳回S_OK

 

注意

應該針對IPersist、IPersistFolderIShellFolder實作相同的 CLSID。

 

您不會直接使用此介面。 它是由初始化 Shell 資料夾物件時,IShellFolder::BindToObject 介面的檔案系統實作所使用。

 

IShellFolder

IShellFolder介面是用來管理資料夾,而且需要部分實作,以便為通訊協定處理常式實作的圖示和內容介面在 Windows 桌面搜尋結果使用者介面中正確運作。 大部分所需的功能都是透過 GetUIObjectOf 方法公開。 這個方法可讓增益集查詢 IExtractIconICoNtextMenu 介面。

IShellFolder介面會使用 PIDLs,而不是 URL。 相較于完整命名空間延伸模組的需求,增益集可以使用只包含 URL 的簡單 IDL 結構。

必須實作 下列 IShellFolder 方法。 請注意,其中五種方法需要最少的實作。

方法 描述
BindToObject () 傳回E_NOTIMPL
BindToStorage () 傳回E_NOTIMPL
CreateViewObject () 傳回E_NOTIMPL
SetNameOf () 傳回E_NOTIMPL
ParseDisplayName () 將 URL 轉換成 PIDL 結構
CompareIDs () 比較兩個 PIDL 值
GetDisplayNameOf () 傳回 PIDL 的 URL
GetUIObjectOf () 這個方法類似于 OLE COM QueryInterface 方法。 如果要求圖示,呼叫端會要求IID_IExtractIcon;如果要求操作功能表,呼叫端會要求IID_ICoNtextMenu。

 

注意

應該針對IPersist、IPersistFolderIShellFolder實作相同的 CLSID。

 

IShellFolder 不會用來列舉資料夾。 這表示資料夾的顯示名稱會是實體 URL。 這可能會在未來變更。

 

ICoNtextMenu

當 WDS 向使用者顯示結果時,使用者可以以滑鼠右鍵按一下專案,並查看 ICoNtextMenu 介面所定義的操作功能表。

操作功能表上的預設動作是按兩下專案時所採取的相同動作。 如果沒有專案的對應 IShellFolderICoNtextMenu 介面,按兩下事件的預設行為就是將 URL 當做引數傳遞至 ShellExecute 函式。

 

IExtractIcon

IExtractIcon 會根據通訊協定處理常式所提供的 PIDL 中的 URL,擷取 WDS 使用者介面的圖示。

 

程式碼範例

自訂通訊協定處理常式使用者介面範例程式碼示範IShellFolder和支援介面的實作,並包含操作 PIDL 的支援。

參考

自訂通訊協定處理常式使用者介面範例程式碼

安裝和註冊通訊協定處理常式