建立搜尋處理程式
[此功能僅支援在 Windows XP 或更早版本下。 請改用 Windows 搜尋。]
Shell 支援數個搜尋公用程式,可讓用戶尋找命名空間物件,例如檔案或印表機。 您可以建立自定義搜尋引擎,並藉由實作和註冊 搜尋處理程式,提供給使用者使用。
建立殼層延伸模組處理程式中 會討論實作和註冊 Shell 延伸模組處理程式的一般程式。 本檔著重於搜尋處理程式特有的實作層面。
搜尋處理程序的運作方式
使用者有兩種方式可選取搜尋引擎。 第一種方式是從 [開始] 功能表。 使用早於 Windows 2000 的系統,選取 [開始] 選單上的 [尋找] 命令會顯示可用搜尋引擎的子功能表。 使用 Windows 2000 及更新版本時, Start 功能表的 [尋找 ] 命令會重新命名為 Search。 下圖顯示 Windows XP 系統上的 [搜尋 ] 按鈕。
使用者也可以從 Windows 檔案總管啟動搜尋。 在 Windows 2000 之前的系統上,他們按兩下 [工具] 選單上的 [尋找] 命令,基本上會顯示與 [開始] 功能表相關聯的功能表相同的功能表。 不過,適用於 Windows 2000 的 Windows 檔案總管會以非常不同的方式處理搜尋引擎。 現在工具列上有 [搜尋] 按鈕,而不是將搜尋引擎當作 [工具] 功能表的子功能表來處理。 按下此按鈕會開啟 [總管] 列的 [搜尋 ] 窗格。 下圖顯示 [ 搜尋檔案和資料夾 ] 搜尋窗格。
Windows 2000 和舊版系統如何管理影響實作和註冊的搜尋處理程式有許多差異。
Windows 2000 前版本 | Windows 2000 和更新版本 |
---|---|
搜尋處理程式會實作為快捷方式功能表處理程式的類型。 | 搜尋處理程式可以實作為快捷方式功能表處理程式,或做為動態 HTML (DHTML) 檔。 |
搜尋處理程式可以是靜態或動態。 靜態處理程式只有在用戶選取時才會載入。 動態處理程式會在啟動時由殼層載入,而且在殼層結束之前不會終止。 | 實作為快捷方式功能表處理程式的處理程式可以是靜態或動態。 實作為 DHTML 檔的處理程式必須是靜態的。 |
搜尋處理程式會出現在 [開始] 功能表的 [尋找] 子功能表和 [Windows 檔案總管工具] 選單的 [尋找] 子功能表上。 | 搜尋處理程式只會出現在 [開始] 選單的 [搜尋] 子功能表上。 若要透過 Windows 檔案總管功能表欄提供自定義搜尋窗格,您必須將其實作為 帶狀物件。 然後,它會列在 [Windows 檔案總管檢視] 功能表的 [總管列] 子功能表上。 |
註冊搜尋處理程式
搜尋處理程式會在文件類型的 FindExtensions 子機碼下註冊。
HKEY_LOCAL_MACHINE
Software
Microsoft
Windows
CurrentVersion
Explorer
FindExtensions
此時,註冊程式取決於處理程式是否為靜態或動態。 如需如何註冊殼層延伸模塊處理程式的一般討論,請參閱 建立殼層延伸模塊處理程式。
註冊靜態搜尋處理程式
只有使用者啟動靜態搜尋處理程式時,才會載入靜態搜尋處理程式。 這種方法最適合小型且可快速載入的 DLL。 如果您使用 DHTML 來實作處理程式,它必須是靜態的。 若要註冊靜態擴充處理程式,請在 FindExtensions 子機碼的 Static 子機碼下,為處理程式建立名為 的子機碼。 系統不會使用名稱,但必須與 FindExtensions 子機碼下的其他搜尋處理程式名稱相同。
快捷功能表型搜尋處理程式
如果您的處理程式實作為 快捷方式功能表處理程式,請將處理程式名稱子機碼的預設值設定為物件的類別識別碼 (CLSID) GUID。 在處理程式的名稱子機碼下,建立名為 0 (零) 的子機碼,並將其預設值設定為將在 Search 或 Find 子功能表中顯示的字串。 您可以使用一般方式啟用鍵盤快捷方式,方法是在快捷鍵字元前面加上 &erand (&)。 您可以藉由在 0 子機碼下建立 DefaultIcon 子機碼,在功能表文字右側顯示選用的小圖示。 將其預設值設定為包含圖示之檔案路徑的字串,後面接著逗號,後面接著圖示的以零起始的索引。
下列範例會 註冊 MySearchEngine 搜尋處理程式。 功能表文字為 「My Search Engine」,M 指定為快捷鍵。 圖示位於 C:\MyDir\MySearch.dll 中,索引為 2。
HKEY_LOCAL_MACHINE
Software
Microsoft
Windows
CurrentVersion
Explorer
FindExtensions
Static
MySearchEngine
(Default) = {MySearchEngine CLSID GUID}
0
(Default) = &My Search Engine
DefaultIcon
(Default) = c:\MyDir\MySearch.dll,2
以 DHTML 為基礎的搜尋處理程式
使用 Windows 2000,您也可以將搜尋處理程式實作為 DHTML 檔。 其名稱會列在 [開始] 功能表的 [搜尋] 子功能表中。 當使用者選取它時,它會啟動 Windows 檔案總管,並將總管列開啟至搜尋檔。 您也可以指定要顯示在總管列右邊的 DHTML 檔。 無法從預設的 [搜尋] 窗格啟動不同的處理程式。 搜尋引擎可以直接從 Windows 檔案總管啟動,但前提是它們實作為 帶狀物件。
若要註冊以 DHTML 為基礎的搜尋處理程式,請將處理程式的名稱子機碼設定為CLSID_ShellSearchExt的字串形式(目前 {169A0691-8DF9-11d1-A1C4-00C04FD75D13}),並建立下列子機碼。
- 在處理程式名稱子機碼下建立 0(零) 子機碼,並將其預設值設定為功能表文字。
- 若要在功能表文字旁邊顯示圖示,請在 0 下建立 DefaultIcon 子機碼,並將其預設值設定為圖示的路徑和索引。
- 在 0 下建立 SearchGUID 子機碼。 將 GUID 指派給 DHTML 檔,並將 SearchGUID 的預設值設定為其字串格式。 此 GUID 不需要在 HKEY_CLASSES_ROOT\CLSID 下註冊。
- 在 SearchGUID 底下建立 URL 子機碼。 將其預設值設定為將出現在總管列中之 HTML 檔的路徑。
- 在 SearchGUID 底下建立 UrlNavNew 子機碼。 將其預設值設定為 HTML 檔的路徑,該路徑會顯示在總管列右邊。
下列範例會 註冊實作為 DHTML 檔的 MySearchEngine 搜尋處理程式。 功能表文字為 「My Search Engine」,M 指定為快捷鍵。 圖示位於 C:\MyDir\MySearch.dll 中,索引為 2。 檔案總管列的 DHTML 檔是 C:\MyDir\MySearch.htm,而要顯示在總管列右邊的檔是 C:\MyDir\MySearchPage.htm。
HKEY_LOCAL_MACHINE
Software
Microsoft
Windows
CurrentVersion
Explorer
FindExtensions
Static
MySearchEngine
(Default) = {169A0691-8DF9-11d1-A1C4-00C04FD75D13}
0
(Default) = &My Search Engine
DefaultIcon
(Default) = c:\MyDir\MySearch.dll,2
SearchGUID
(Default) = {My Search GUID}
Url
(Default) = C:\MyDir\MySearch.htm
UrlNavNew
(Default) = C:\MyDir\MySearchPage.htm
註冊動態搜尋處理程式
如果您的處理程式實作為 快捷方式功能表處理程式,您也可以將其註冊為動態處理程式。 在此情況下,它會使用殼層載入,而且只有在殼層結束時才會終止。 當使用者啟動動態搜尋處理程式時,動態搜尋處理程式的回應速度會比靜態處理程式快得多。 如果處理程式的 DLL 可能需要很長的時間才能載入,或可能經常呼叫,這個方法最適用。
動態搜尋處理程式會在 FindExtensions 子機碼下註冊。
HKEY_LOCAL_MACHINE
Software
Microsoft
Windows
CurrentVersion
Explorer
FindExtensions
建立名為的 FindExtensions 子機碼,並將其預設值設定為處理程式的 CLSID GUID。 動態搜尋處理程式不支援功能表圖示。 下列範例會將 MySearchEngine 註冊為動態搜尋處理程式。
HKEY_LOCAL_MACHINE
Software
Microsoft
Windows
CurrentVersion
Explorer
FindExtensions
MySearchEngine
(Default) = {MySearchEngine CLSID GUID}
0
(Default) = &My Search Engine
不同於靜態搜尋處理程式,您不會在登錄中指定功能表文字。 載入處理程式時,Shell 會呼叫處理程式的 IContextMenu::QueryContextMenu 方法,將專案新增至 Find 或 Search 子功能表。
實作搜尋處理程式
搜尋處理程式可以實作為所有 Windows 版本的快捷方式功能表處理程式。 針對 Windows 2000,它們也可以實作為 DHTML 檔。
如需如何實作快捷功能表處理程式的一般討論,請參閱 建立操作功能表處理程式。 搜尋處理程式與標準快捷方式功能表處理程式只有幾種不同。
針對靜態功能表處理程式, 會從登錄中的資訊建立 Find 或 Search 子選單。 不需要處理程式新增功能表項,因為一般的快捷方式功能表處理程式會這樣。 Shell 會以下列方式管理靜態功能表處理程式。
- 當使用者啟動處理程式的功能表項時,Shell 會載入處理程式的 DLL,並呼叫 IContextMenu::InvokeCommand 以通知處理程式啟動搜尋引擎。 不會呼叫 IShellExtInit::Initialize 和 IContextMenu::QueryContextMenu 方法。
- 呼叫 IContextMenu::InvokeCommand 時,傳入的 CMINVOKECOMMANDINFO 結構的 lpVerb 成員會識別命令。 lpVerb 的低序字會設定為命令子機碼名稱的相等數值。 由於此子機碼通常命名 為 0, 因此 lpVerb 通常會設定為零。 處理程式應該接著啟動搜尋引擎。
動態搜尋處理程序的實作方式與一般快捷方式功能表處理程式大致相同。 主要例外狀況是呼叫 IShellExtInit::Initialize 時,pidlFolder 和 lpdobj 自變數會設定為 NULL。
以 DHTML 為基礎的搜尋處理程式會實作為一般 DHTML 檔。 它們可以包含 Windows Internet Explorer 所支援的任何 HTML、DHTML 或腳本技術。