如何建立複製勾點處理常式
建立 殼層延伸模組處理常式中會討論實作和註冊 Shell 延伸模組處理常式的一般程式。 本檔著重于複製勾點處理常式特有的實作層面。
指示
步驟 1:實作複製勾點處理常式
如同所有殼層擴充處理常式,複製攔截處理常式是同進程元件物件模型, (COM) 實作為 DLL 的物件。 除了 IUnknown: ICopyHook之外,它們還會匯出一個介面。 Shell 會直接初始化處理常式,因此不需要初始化介面,例如 IShellExtInit。
ICopyHook介面具有單一方法ICopyHook::CopyCallback。 當資料夾即將移動時,Shell 會呼叫這個方法。 它會傳入各種資訊,包括:
- 資料夾的名稱。
- 資料夾的目的地或新名稱。
- 正在嘗試的作業。
- 來源和目的地資料夾的屬性。
- 可用來顯示使用者介面的視窗控制碼。
呼叫處理常式的 ICopyHook::CopyCallback 方法時,它會傳回下列三個值之一,以指示殼層應該如何繼續。
值 | 描述 |
---|---|
IDYES | 允許作業。 |
IDNO | 防止此資料夾上的作業。 Shell 可以繼續進行任何其他已核准的作業,例如批次複製作業。 |
IDCANCEL | 防止目前的作業,並取消任何暫止的作業。 |
步驟 2:註冊複製勾點處理常式
資料夾的複製勾點處理常式會在HKEY_CLASSES_ROOT\Directory\Shellex\CopyHookHandlers子機碼下註冊。 為處理常式建立 名為 的 CopyHookHandlers 子機碼,並將子機碼的預設值設定為處理常式類別識別碼的字串形式, (CLSID) GUID。
下列範例會將 MyCopyHandler 子機碼新增至 Shell 的複製攔截處理常式清單。
HKEY_CLASSES_ROOT
Directory
shellex
CopyHookHandlers
MyCopyHandler
(Default) = {MyCopyHandler CLSID GUID}
印表機物件的複製攔截處理常式基本上會以相同的方式註冊。 唯一的差異在於您必須在HKEY_CLASSES_ROOT\Printers子機碼下註冊它們。
備註
一般而言,使用者和應用程式可以複製、移動、刪除或重新命名資料夾,但有一些限制。 藉由實作複製攔截處理常式,您可以控制這些作業是否發生。 例如,實作這類處理常式可讓您防止重新命名或刪除重要資料夾。 也可以針對印表機物件實作複製勾點處理常式。
複製攔截處理常式是全域的。 每次應用程式或使用者嘗試複製、移動、刪除或重新命名資料夾或印表機物件時,Shell 都會呼叫所有已註冊的處理常式。 處理常式不會執行作業本身。 它只會核准或核准它。 如果所有處理常式都核准,Shell 會執行作業。 如果有任何處理程式已取消作業,則不會呼叫其餘處理常式。 複製勾點處理常式不會收到作業成功或失敗的通知,因此無法用來監視檔案作業。
相關主題