新增圖示、預覽和快顯功能表
若要確保資料在搜尋期間正確編制索引並呈現給使用者,您需要實作殼層資料存放區, (也稱為 殼層命名空間 延伸模組) ,而檔案類型處理常式 (也稱為殼層延伸模組、延伸模組 處理常式或殼層延伸模組處理常式) 。
本主題描述下列介面:
實作檔案類型處理常式
這些殼層延伸模組或檔案類型處理常式可為使用者提供下列殼層體驗:
- 結果檢視會顯示專案類型的特定圖示。
- 當使用者選取專案時,結果檢視會顯示專案的預覽。
- 使用者可以按兩下專案來起始事件,例如開啟檔案。
- 使用者可以以滑鼠右鍵按一下專案,以存取快速鍵 (內容) 功能表。
- 使用者可以拖放專案。
就像所有元件物件模型 (COM) 物件一樣,檔案類型處理常式必須實作 IUnknown 介面和類別處理站。
在 Windows XP 或更早版本中,處理常式也應該實作:
在 Windows Vista 中, IPersistFile 介面 和 IShellExtInit 介面 已由下列三個介面取代,讓 Shell 初始化處理常式:
若要提供合理的使用者體驗,您必須使用通訊協定處理常式提供 Shell 資料存放區。 接著,該資料存放區會作為圖示處理常式、快捷方式功能表處理常式、預覽處理常式等的「處理站」。 IShellFolder 介面需要IPersist 介面和IPersistFolder 介面的最小實作,ICoNtextMenu和IExtractIcon需要最少的 IShellFolder 介面實作。
注意
應該針對 IPersist、 IPersistFolder 和 IShellFolder實作相同的類別識別碼 (CLSID) 。
如需建立 Shell 資料存放區以支援通訊協定處理常式的詳細資訊,請參閱 實作基本資料夾物件介面。
IPersist
IPersist介面會定義單一方法GetClassID,其設計目的是提供可以持續儲存在系統中之物件的 CLSID。
方法 | Description |
---|---|
GetClassID | 傳回 Shell 資料存放區物件的 CLSID |
IPersistFolder
IPersistFolder介面是用來初始化 Shell 資料夾物件。 這個介面的實作是衍生自 IPersist的實作,是資料夾在 Shell 命名空間中的告知位置的方式。 您不會直接使用此介面。 當它初始化 Shell 資料夾物件時,會由 IShellFolder::BindToObject 方法 的檔案系統實作使用。
方法 | Description |
---|---|
Initialize | 指示 Shell 資料夾物件根據傳遞的資訊初始化本身,並傳回S_OK |
IShellFolder
IShellFolder 介面介面是用來管理資料夾,而且需要部分實作,以便針對通訊協定處理常式實作的圖示和內容介面在 Windows 搜尋結果使用者介面中正確運作。 大部分所需的功能都是透過 GetUIObjectOf 方法公開。 這個方法可讓增益集查詢 IExtractIcon 和 ICoNtextMenu 介面。
IShellFolder 介面介面會使用 PIDLs 而非 URL。 相較于完整殼層資料存放區的需求,增益集可以使用只包含 URL 的簡單 IDL 結構。
必須實作下列 IShellFolder 介面 方法。 其中五個方法需要最少的實作。
方法 | Description |
---|---|
BindToObject | 傳回E_NOTIMPL |
BindToStorage | 傳回E_NOTIMPL |
CreateViewObject | 傳回E_NOTIMPL |
SetNameOf | 傳回E_NOTIMPL |
ParseDisplayName | 將 URL 轉換為 PIDL 結構 |
CompareIDs | 比較兩個 PIDL 值 |
GetDisplayNameOf | 傳回 PIDL 的 URL |
GetUIObjectOf | 這個方法類似于 IUnknown::QueryInterface 方法。 如果要求圖示,呼叫端會要求IID_IExtractIcon;如果要求快捷方式功能表,則呼叫端會要求IID_ICoNtextMenu |
IShellFolder 不會用來列舉資料夾。 這表示資料夾的顯示名稱將是實體 URL。 這可能會在未來變更。
ICoNtextMenu
當 Windows 搜尋向使用者顯示結果時,使用者可以以滑鼠右鍵按一下專案,並查看 ICoNtextMenu 介面所定義的快捷方式功能表。 快顯功能表也稱為操作功能表。
快顯功能表上的預設動作與按兩下專案時所採取的動作相同。 如果沒有專案的對應 IShellFolder 或 ICoNtextMenu 介面,按兩下事件的預設行為就是將 URL 當做引數傳遞至 ShellExecute 函 式函式。
如需建立快捷方式功能表處理常式的詳細資訊,請參閱 建立操作功能表處理常式 ,以及 範例:範例程式碼的通訊協定處理常式殼層延伸模組 。
IExtractIcon
IExtractIcon 會根據通訊協定處理常式所提供 PIDL 中的 URL,擷取 Windows 搜尋使用者介面的圖示。
如需建立圖示處理常式和範例:範例程式碼之通訊協定處理常式的殼層延伸模組的詳細資訊,請參閱建立圖示處理常式。
IPreviewHandler
IPreviewHandler會在 Windows 檔案總管中呈現所選項目的豐富預覽。 預覽可在 Windows 搜尋 4.0 或 Windows Vista 中使用 Windows 桌面搜尋 3.x。
若要建立自訂預覽處理常式:
實作採用 IStream 的 IPreviewHandler,遵循預覽處理常式中提供的指導方針。
註冊您的預覽處理常式:
HKEY_CLASSES_ROOT\<Your_Object_Type>
HKEY_CLASSES_ROOT\<Your_Object_Type>\ShellEx
HKEY_CLASSES_ROOT\<Your_Object_Type>\ShellEx\{8895b1c6-b41f-4c1c-a562-0d564250836f} @ = {<Your_PreviewHandler_GUID>}
完成下列兩個步驟,以實作 URL 的 Shell 資料夾:
在 IShellFolder::GetUIObjectOf 方法中,處理 IQueryAssociations 並傳回殼層專案的關聯,如下列程式碼範例所示。
CComPtr<IQueryAssociations> spqa; AssocCreate(CLSID_QueryAssociations, __uuidof(IQueryAssociations), &spqa); spqa->Init(0, L"Your_Object_Type", NULL, NULL); spqa->QueryInterface(riid, ppvReturn);
在 Shell 查詢您的 Shell 資料夾以初始化預覽處理常式之後,請移至您的 IShellFolder::BindToObject 方法 方法,處理IID_IStream並將 IStream 傳回至您的 URL。
若要重複使用您檔案類型的現有預覽處理常式,請遵循下列兩個步驟:
- 使用現有預覽處理常式的 CLSID 來註冊檔案類型的預覽處理常式,以取代 < Your_PreviewHandler_GUID > 。
- 實作 Shell 資料夾。
如需建立預覽處理常式的詳細資訊,請參閱 IPreviewHandler 和 預覽處理常式。
其他資源
- 如需編制索引程式的概觀,請參閱 編制索引進程。
- 如需建立處理常式的詳細資訊,請參閱 註冊殼層延伸模組、 建立殼層延伸模組處理常式、 操作功能表、 Shell 命名空間延伸 模組和 預覽處理常式。
相關主題