使用殼層延伸模組新增圖示和操作功能表
注意
Windows 桌面搜尋 2.x 是一種過時的技術,原本是 Windows XP 和 Windows Server 2003 的增益集。 在較新版本中,請改用 Windows 搜尋 。
您可以藉由實作殼層延伸模組,改善使用者使用 Microsoft Windows 桌面搜尋 (WDS) 和通訊協定處理常式的體驗。 如果沒有進一步擴充功能,您建立的通訊協定處理常式將不會包含下列使用者體驗:
- WDS 不會顯示結果的特定圖示。
- 當使用者按兩下專案時,使用者介面將不會回應事件。
- 當使用者以滑鼠右鍵按一下專案時,操作功能表將不支援專案的任何作業。
IShellFolder需要IPersist 和 IPersistFolder的最小實作,ICoNtextMenu和IExtractIcon需要IShellFolder的最小實作,這兩個介面可提供更順暢的使用者體驗。
IPersist
IPersist介面會定義單一方法GetClassID,其設計目的是提供可以持續儲存在系統中之物件的 CLSID。
方法 | 描述 |
---|---|
GetClassID () | 傳回通訊協定處理常式的 ClassID |
注意
應該針對IPersist、IPersistFolder和IShellFolder實作相同的 CLSID。
IPersistFolder
IPersistFolder介面是用來初始化 Shell 資料夾物件。 這個介面的實作是衍生自 IPersist的實作,是資料夾在 Shell 命名空間中的告知位置的方式。
方法 | 描述 |
---|---|
Initialize () | 指示 Shell 資料夾物件根據傳遞的資訊初始化本身,並傳回S_OK |
注意
應該針對IPersist、IPersistFolder和IShellFolder實作相同的 CLSID。
您不會直接使用此介面。 它是由初始化 Shell 資料夾物件時,IShellFolder::BindToObject 介面的檔案系統實作所使用。
IShellFolder
IShellFolder介面是用來管理資料夾,而且需要部分實作,以便為通訊協定處理常式實作的圖示和內容介面在 Windows 桌面搜尋結果使用者介面中正確運作。 大部分所需的功能都是透過 GetUIObjectOf 方法公開。 這個方法可讓增益集查詢 IExtractIcon 和 ICoNtextMenu 介面。
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、IPersistFolder和IShellFolder實作相同的 CLSID。
IShellFolder 不會用來列舉資料夾。 這表示資料夾的顯示名稱會是實體 URL。 這可能會在未來變更。
ICoNtextMenu
當 WDS 向使用者顯示結果時,使用者可以以滑鼠右鍵按一下專案,並查看 ICoNtextMenu 介面所定義的操作功能表。
操作功能表上的預設動作是按兩下專案時所採取的相同動作。 如果沒有專案的對應 IShellFolder 或 ICoNtextMenu 介面,按兩下事件的預設行為就是將 URL 當做引數傳遞至 ShellExecute 函式。
IExtractIcon
IExtractIcon 會根據通訊協定處理常式所提供的 PIDL 中的 URL,擷取 WDS 使用者介面的圖示。
程式碼範例
自訂通訊協定處理常式使用者介面範例程式碼示範IShellFolder和支援介面的實作,並包含操作 PIDL 的支援。
相關主題