如何建立複製勾點處理常式

建立 殼層延伸模組處理常式中會討論實作和註冊 Shell 延伸模組處理常式的一般程式。 本檔著重于複製勾點處理常式特有的實作層面。

指示

步驟 1:實作複製勾點處理常式

如同所有殼層擴充處理常式,複製攔截處理常式是同進程元件物件模型, (COM) 實作為 DLL 的物件。 除了 IUnknownICopyHook之外,它們還會匯出一個介面。 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 會執行作業。 如果有任何處理程式已取消作業,則不會呼叫其餘處理常式。 複製勾點處理常式不會收到作業成功或失敗的通知,因此無法用來監視檔案作業。

建立 Shell 擴充功能處理常式

ICopyHook