Compartilhar via


Como criar manipuladores de gancho de cópia

Os procedimentos gerais para implementar e registrar um manipulador de extensão shell são discutidos em Criando manipuladores de extensão do Shell. Este documento se concentra nos aspectos da implementação que são específicos para copiar manipuladores de gancho.

Instruções

Etapa 1: Implementando manipuladores de gancho de cópia

Como todos os manipuladores de extensão do Shell, os manipuladores de gancho de cópia são objetos COM (Component Object Model) em processo implementados como DLLs. Eles exportam uma interface além de IUnknown: ICopyHook. O Shell inicializa o manipulador diretamente, portanto, não há necessidade de uma interface de inicialização, como IShellExtInit.

A interface ICopyHook tem um único método, ICopyHook::CopyCallback. Quando uma pasta está prestes a ser movida, o Shell chama esse método. Ele passa uma variedade de informações, incluindo:

  • O nome da pasta.
  • O destino da pasta ou o novo nome.
  • A operação que está sendo tentada.
  • Os atributos das pastas de origem e destino.
  • Um identificador de janela que pode ser usado para exibir uma interface do usuário.

Quando o método ICopyHook::CopyCallback do manipulador é chamado, ele retorna um dos três valores a seguir para indicar ao Shell como ele deve continuar.

Valor Descrição
IDYES Permite a operação.
IDNO Impede a operação nessa pasta. O Shell pode continuar com qualquer outra operação que tenha sido aprovada, como uma operação de cópia em lote.
IDCANCEL Impede a operação atual e cancela todas as operações pendentes.

 

Etapa 2: Registrar manipuladores de gancho de cópia

Os manipuladores de gancho de cópia para pastas são registrados na subchaveCopyHookHandlers doshellex\ dodiretório\HKEY_CLASSES_ROOT\. Crie uma subchave de CopyHookHandlers nomeada para o manipulador e defina o valor padrão da subchave para a forma de cadeia de caracteres do GUID do IDENTIFICADOR de classe (CLSID) do manipulador.

O exemplo a seguir adiciona a subchave MyCopyHandler à lista de manipuladores de gancho de cópia do Shell.

HKEY_CLASSES_ROOT
   Directory
      shellex
         CopyHookHandlers
            MyCopyHandler
               (Default) = {MyCopyHandler CLSID GUID}

Manipuladores de gancho de cópia para objetos de impressora são registrados essencialmente da mesma maneira. A única diferença é que você deve registrá-los na subchave impressoras HKEY_CLASSES_ROOT\.

Comentários

Normalmente, usuários e aplicativos podem copiar, mover, excluir ou renomear pastas com poucas restrições. Ao implementar um manipulador de gancho de cópia, você pode controlar se essas operações ocorrem. Por exemplo, implementar esse manipulador permite impedir que pastas críticas sejam renomeados ou excluídos. Manipuladores de gancho de cópia também podem ser implementados para objetos de impressora.

Manipuladores de gancho de cópia são globais. O Shell chama todos os manipuladores registrados sempre que um aplicativo ou usuário tenta copiar, mover, excluir ou renomear um objeto de pasta ou impressora. O manipulador não executa a operação em si. Ele só aprova ou veta. Se todos os manipuladores aprovarem, o Shell fará a operação. Se algum manipulador vetar a operação, ela será cancelada e os manipuladores restantes não serão chamados. Os manipuladores de gancho de cópia não são informados sobre o êxito ou a falha da operação, portanto, eles não podem ser usados para monitorar operações de arquivo.

Criar Manipuladores de Extensão de Shell

ICopyHook