註冊殼層延伸模組處理常式
Shell 延伸模組處理常式物件必須先註冊,Shell 才能使用它。 本主題是如何註冊 Shell 延伸模組處理常式的一般討論。
每當您建立或變更 Shell 延伸模組處理常式時,請務必通知系統您已進行變更。 若要這樣做,請呼叫 SHChangeNotify,並指定 SHCNE_ASSOCCHANGED 事件。 如果您未呼叫 SHChangeNotify,在系統重新開機之前,可能無法辨識變更。
有一些適用于 Windows 2000 系統的其他因素。 如需詳細資訊,請參閱 在 Windows 2000 系統上註冊殼層延伸模組處理常式 一節。
如同所有元件物件模型 (COM) 物件,您必須使用 Guidgen.exe 之類的工具建立處理常式的 GUID,此工具隨附 Windows 軟體發展工具組 (SDK) 。 HKEY_CLASSES_ROOTCLSID下\ 建立子機碼,其名稱為該 GUID 的字串形式。 因為 Shell 擴充處理常式是同進程伺服器,所以您也必須在該 GUID 子機碼下建立 InprocServer32 子機碼,並將 (Default) 值設定為處理常式 DLL 的路徑。 使用 Apartment 執行緒模型。 以下顯示一個範例:
HKEY_CLASSES_ROOT
CLSID
{00021500-0000-0000-C000-000000000046}
InprocServer32
(Default) = %windir%\System32\Example.dll
ThreadingModel = Apartment
每當 Shell 採取可牽涉到 Shell 延伸模組處理常式的動作時,它會檢查適當的登錄子機碼。 呼叫擴充處理常式時所註冊控制項的子機碼。 例如,當 Shell 顯示 檔案類型成員的快捷方式功能表時,呼叫快顯功能表處理常式是常見的做法。 在此情況下,處理常式必須在檔案類型的 ProgID 子機碼下註冊。
本主題討論下列主題:
處理常式名稱
若要啟用 Shell 擴充處理常式,請使用處理程式子機碼名稱建立子機碼, (請參閱下列子機碼,) 在檔案類型的ProgID (子機碼底下) ,或predefined_shell_objects) 的 Shell 物件類型名稱 (。
例如,如果您想要註冊 MyProgram.1 的快捷方式功能表延伸處理常式,請從建立下列子機碼開始:
HKEY_CLASSES_ROOT
MyProgram.1
ShellEx
ContextMenuHandlers
針對下列處理常式,請在名為 類別識別碼的字串版本底下建立子機碼, (Shell 延伸模組的 CLSID) 字串版本。 您可以藉由建立多個子機碼,在處理常式子機碼名稱下註冊多個延伸模組。
處理常式 | 介面 | 處理常式子機碼名稱 |
---|---|---|
資料行提供者處理常式 | IColumnProvider | ColumnHandlers |
快捷方式功能表處理常式 | ICoNtextMenu | CoNtextMenuHandlers |
Copyhook 處理常式 | ICopyHook | CopyHookHandlers |
拖放功能處理常式 | ICoNtextMenu | DragDropHandlers |
屬性工作表處理常式 | IShellPropSheetExt | PropertySheetHandlers |
針對下列處理常式,「處理常式子機碼名稱」索引鍵的預設值是 Shell 擴充功能的 CLSID 字串版本。 這些處理常式只能註冊一個擴充功能。
處理常式 | 介面 | 處理常式子機碼名稱 |
---|---|---|
資料處理程式 | IDataObject | DataHandler |
置放處理常式 | IDropTarget | DropHandler |
圖示處理常式 | IExtractIconA/W | IconHandler |
縮圖影像處理常式 | IThumbnailProvider | {E357FCCD-A995-4576-B01F-234630154E96} |
資訊提示處理常式 | IQueryInfo | {00021500-0000-0000-C000-000000000046} |
ANSI (殼層連結) | IShellLinkA | {000214EE-0000-0000-C000-00000000046} |
殼層連結 (UNICODE) | IShellLinkW | {000214F9-0000-0000-C000-000000000046} |
結構化儲存體 | IStorage | {0000000B-0000-0000-C000-000000000046} |
中繼資料 | IPropertySetStorage | PropertyHandler |
釘選到 [開始] 功能表 | IStartMenuPinnedList | {a2a9545d-a0c2-42b4-9708-a0b2badd77c8} |
釘選到工作列 | {90AA3A4E-1CBA-4233-B8BB-535773D48449} |
指定用來將 [釘選到開始] 功能表 和 [釘選到工作列] 的子機碼,只需要包含 IsShortCut 專案的檔案類型。
預先定義的殼層物件
Shell 會在 HKEY_CLASSES_ROOT 下定義其他物件,其可透過與檔案類型相同的方式進行擴充。 例如,若要新增所有檔案的屬性工作表處理常式,您可以在 PropertySheetHandlers 子機碼下註冊。
HKEY_CLASSES_ROOT
*
shellex
PropertySheetHandlers
下表提供可註冊擴充處理常式HKEY_CLASSES_ROOT的各種子機碼。 請注意,許多擴充處理常式都無法在所有列出的子機碼下註冊。 如需詳細資訊,請參閱特定處理常式的檔。
子機碼 | Description | 可能的處理常式 |
---|---|---|
* | 所有檔案 | 快捷方式功能表、屬性工作表、動詞 (請參閱下列) |
AllFileSystemObjects | 所有檔案和檔案資料夾 | 快顯功能表、屬性工作表、動詞 |
資料夾 | 全部資料夾 | 快顯功能表、屬性工作表、動詞 |
目錄 | 資料夾 | 快顯功能表、屬性工作表、動詞 |
Directory\Background | 檔案資料夾背景 | 僅限快捷方式功能表 |
DesktopBackground | 桌面背景 (Windows 7 和更新版本) | 快顯功能表、動詞 |
磁碟機 | MyComputer 中的所有磁片磁碟機,例如 「C:\」 | 快顯功能表、屬性工作表、動詞 |
Network | [我的網路位置] 底下的整個網路 () | 快顯功能表、屬性工作表、動詞 |
Network\Type\# | 類型的所有物件 # (請參閱下方) | 快顯功能表、屬性工作表、動詞 |
NetShare | 所有網路共用 | 快顯功能表、屬性工作表、動詞 |
NetServer | 所有網路伺服器 | 快顯功能表、屬性工作表、動詞 |
network_provider_name | 網路提供者 「network_provider_name」提供的所有物件 | 快顯功能表、屬性工作表、動詞 |
印表機 | 所有印表機 | 快顯功能表、屬性工作表 |
AudioCD | CD 磁片磁碟機中的音訊 CD | 僅限動詞 |
Dvd | DVD 磁片磁碟機 (Windows 2000) | 快顯功能表、屬性工作表、動詞 |
備註
- 檔案資料夾背景快捷方式功能表是透過在檔案資料夾內按一下滑鼠右鍵來存取,但不能在任何資料夾的內容上存取。
- 「Verbs」 是HKEY_CLASSES_ROOT子機碼殼層\動詞\下\ 註冊的特殊命令。
- 針對[網路\類型\# ],「#」 是十進位中的網路提供者類型代碼。 網路提供者類型代碼是網路類型的高字。 在 Winnetwk.h 標頭檔中會提供網路類型清單, (WNNC_NET_* 值) 。 例如,WNNC_NET_SHIVA 0x00330000,因此對應的類型子機碼會HKEY_CLASSES_ROOT\網路\類型\51。
- 「network_provider_name」 是 WNetGetProviderName所指定的網路提供者名稱,其空格會轉換成底線。 例如,如果已安裝 Microsoft 網路提供者,則其提供者名稱為 「Microsoft Windows Network」,而對應的network_provider_name則Microsoft_Windows_Network。
延伸模組處理常式註冊的範例
若要啟用特定處理常式,請使用處理程式名稱,在擴充處理常式類型子機碼下建立子機碼。 Shell 不會使用處理程式的名稱,但必須與該類型子機碼下所有其他名稱不同。 將名稱子機碼的預設值設定為處理常式 GUID 的字串形式。
下列範例說明使用範例 .myp 檔案類型來啟用快捷方式功能表和屬性工作表擴充處理常式的登錄專案。
HKEY_CLASSES_ROOT
.myp
(Default) = MyProgram.1
CLSID
{00000000-1111-2222-3333-444444444444}
InProcServer32
(Default) = C:\MyDir\MyCommand.dll
ThreadingModel = Apartment
{11111111-2222-3333-4444-555555555555}
InProcServer32
(Default) = C:\MyDir\MyPropSheet.dll
ThreadingModel = Apartment
MyProgram.1
(Default) = MyProgram Application
Shellex
ContextMenuHandler
MyCommand
(Default) = {00000000-1111-2222-3333-444444444444}
PropertySheetHandlers
MyPropSheet
(Default) = {11111111-2222-3333-4444-555555555555}
相關主題