Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Um objeto de manipulador de extensão shell deve ser registrado antes que o Shell possa usá-lo. Este tópico é uma discussão geral sobre como registrar um manipulador de extensão shell.
Sempre que você cria ou altera um manipulador de extensão shell, é importante notificar o sistema de que você fez uma alteração. Faça isso chamando SHChangeNotify, especificando o evento SHCNE_ASSOCCHANGED . Se você não chamar SHChangeNotify, a alteração poderá não ser reconhecida até que o sistema seja reinicializado.
Há alguns fatores adicionais que se aplicam a sistemas Windows 2000. Para obter detalhes, consulte a seção Registrar manipuladores de extensão do Shell na seção Windows 2000 Systems.
Assim como acontece com todos os objetos COM (Component Object Model), você deve criar um GUID para o manipulador usando uma ferramenta como Guidgen.exe, que é fornecida com o SDK (Software Development Kit) do Windows. Crie uma subchave em HKEY_CLASSES_ROOT\CLSID cujo nome é a forma de cadeia de caracteres desse GUID. Como os manipuladores de extensão do Shell são servidores em processo, você também deve criar uma subchave InprocServer32 sob essa subchave GUID com o valor (Padrão) definido como o caminho da DLL do manipulador. Use o modelo de threading de apartamento. Um exemplo é mostrado aqui:
HKEY_CLASSES_ROOT
CLSID
{00021500-0000-0000-C000-000000000046}
InprocServer32
(Default) = %windir%\System32\Example.dll
ThreadingModel = Apartment
Importante
ThreadingModel deve ser Apartment para manipuladores de extensões do shell. As exibições de pasta do Shell e o Explorer são executados em um thread sta (apartamento de thread único). O uso dos modelos de threading Free ou Both pode causar falhas intermitentes, impasses ou travamentos difíceis de diagnosticar.
Para aplicativos de área de trabalho empacotados (MSIX), prefira o registro baseado no manifesto usando o elemento desktop4:Extension em vez de gravar chaves do Registro diretamente. Isso garante a identidade adequada do pacote e uma desinstalação sem resíduos.
Sempre que o Shell executa uma ação que pode envolver um manipulador de extensão shell, ele verifica a subchave apropriada do Registro. A subchave sob a qual um manipulador de extensão é registrado controla quando ele será chamado. Por exemplo, é uma prática comum ter um manipulador de menu de atalho chamado quando o Shell exibe um menu de atalho para um membro de um tipo de arquivo. Nesse caso, o manipulador deve ser registrado na subchave ProgID do tipo de arquivo.
Este tópico aborda os seguintes assuntos:
- Nomes de manipulador
- Objetos shell predefinidos
- Exemplo de registro de um manipulador de extensão
- Tópicos relacionados
Nomes de manipuladores
Para habilitar um manipulador de extensão do Shell, crie uma subchave com o nome da subchave do manipulador (veja abaixo) sob a subchave ShellEx de ProgID (para tipos de arquivo) ou do nome do tipo de objeto do Shell (para predefined_shell_objects).
Por exemplo, se você quiser registrar um manipulador de extensão de menu de atalho para MyProgram.1, comece criando a seguinte subchave:
HKEY_CLASSES_ROOT
MyProgram.1
ShellEx
ContextMenuHandlers
Para os manipuladores a seguir, crie uma subchave sob a subchave "Handler Subkey name", com o nome correspondente à representação em cadeia de caracteres do identificador de classe (CLSID) da extensão do Shell. Várias extensões podem ser registradas no nome da subchave do manipulador criando várias subchaves.
| Manipulador | Interface | Nome da subchave do manipulador |
|---|---|---|
| Manipulador do provedor de colunas | IColumnProvider | ColumnHandlers |
| Manipulador de menu de atalho | IContextMenu | ContextMenuHandlers |
| Manipulador de Copyhook | ICopyHook | CopyHookHandlers |
| Manipulador de arrastar e soltar | IContextMenu | DragDropHandlers |
| Manipulador de folha de propriedades | IShellPropSheetExt | PropertySheetHandlers |
Para os manipuladores a seguir, o valor padrão da chave "Nome da Subchave do Manipulador" é a versão da cadeia de caracteres do CLSID da extensão shell. Somente uma extensão pode ser registrada para esses manipuladores.
| Manipulador | Interface | Nome da subchave do manipulador |
|---|---|---|
| Manipulador de dados | IDataObject | Datahandler |
| Manipulador de soltar | IDropTarget | DropHandler |
| Manipulador de ícones | IExtractIconA/W | IconHandler |
| Manipulador de imagem em miniatura | IThumbnailProvider | {E357FCCD-A995-4576-B01F-234630154E96} |
| Manipulador de infodicas | IQueryInfo | {00021500-0000-0000-C000-00000000046} |
| Link do Shell (ANSI) | IShellLinkA | {000214EE-0000-0000-C000-00000000046} |
| Link do Shell (UNICODE) | IShellLinkW | {000214F9-0000-0000-C000-00000000046} |
| Armazenamento estruturado | IStorage | {0000000B-0000-0000-C000-00000000046} |
| Metadados | IPropertySetStorage | PropertyHandler |
| Fixar no menu Iniciar | IStartMenuPinnedList | {a2a9545d-a0c2-42b4-9708-a0b2badd77c8} |
| Fixar na barra de tarefas | {90AA3A4E-1CBA-4233-B8BB-535773D48449} |
As subchaves especificadas para adicionar Fixar no menu Iniciar e Fixar na Barra de Tarefas ao menu de atalho de um item são necessárias apenas para tipos de arquivo que incluem a entrada IsShortCut.
Objetos de shell predefinidos
O Shell define objetos adicionais em HKEY_CLASSES_ROOT que podem ser estendidos da mesma forma que os tipos de arquivo. Por exemplo, para adicionar um manipulador de folha de propriedades para todos os arquivos, você pode se registrar na subchave PropertySheetHandlers .
HKEY_CLASSES_ROOT
*
shellex
PropertySheetHandlers
A tabela a seguir fornece as várias subchaves de HKEY_CLASSES_ROOT sob as quais os manipuladores de extensão podem ser registrados. Observe que muitos manipuladores de extensão não podem ser registrados em todas as subchaves listadas. Para obter mais detalhes, consulte a documentação do manipulador específico.
| Subchave | Descrição | Manipuladores possíveis |
|---|---|---|
| * | Todos os arquivos | Menu de atalho, folha de propriedades, verbos (veja abaixo) |
| AllFileSystemObjects | Todos os arquivos e pastas de arquivo | Menu de Atalho, Página de Propriedades, Verbos |
| Folder | Todas as pastas | Menu de Atalho, Página de Propriedades, Verbos |
| Directory | Pastas de arquivo | Menu de Atalho, Folha de Propriedades, Verbos |
| Directory\Background | Plano de fundo da pasta de arquivo | Menu de atalho apenas |
| DesktopBackground | Plano de fundo da área de trabalho (Windows 7 e superior) | Menu de atalho, verbos |
| Unidade | Todas as unidades em Meu Computador, como "C:\" | Menu de Atalho, Folha de Propriedades, Verbos |
| Rede | Rede inteira (em Meus Locais de Rede) | Menu de Atalho, Folha de Propriedades, Verbos |
| Network\Type\ # | Todos os objetos do tipo # (veja abaixo) | Menu de Atalho, Folha de Propriedades, Verbos |
| Netshare | Todos os compartilhamentos de rede | Menu de Atalho, Folha de Propriedades, Verbos |
| NetServer | Todos os servidores de rede | Menu de Atalho, Folha de Propriedades, Verbos |
| network_provider_name | Todos os objetos fornecidos pelo provedor de rede "network_provider_name" | Menu de Atalho, Folha de Propriedades, Verbos |
| Printers | Todas as impressoras | Menu de atalho, Página de propriedades |
| AudioCD | CD de áudio na unidade de CD | Somente verbos |
| DVD | Unidade de DVD (Windows 2000) | Menu de Atalho, Folha de Propriedades, Verbos |
Observações
- O menu de atalho de plano de fundo da pasta de arquivo é acessado clicando com o botão direito do mouse em uma pasta de arquivo, mas não sobre qualquer conteúdo da pasta.
- "Verbos" são comandos especiais registrados em HKEY_CLASSES_ROOT\Subchave\Shell\Verbo.
- Para Rede\Tipo\#, "#" é um código decimal do tipo de provedor de rede. O código de tipo de provedor de rede é a palavra alta de um tipo de rede. A lista de tipos de rede é fornecida no arquivo de cabeçalho Winnetwk.h (valores WNNC_NET_*). Por exemplo, WNNC_NET_SHIVA é 0x00330000, portanto, a subchave de tipo correspondente seria HKEY_CLASSES_ROOT\Tipo\ deRede\51.
- "network_provider_name" é um nome de provedor de rede, conforme especificado por WNetGetProviderName, com os espaços convertidos em sublinhados. Por exemplo, se o provedor de rede Microsoft estiver instalado, seu nome de provedor será "rede Microsoft Windows" e o network_provider_name correspondente será Microsoft_Windows_Network.
Exemplo de registro de um manipulador de extensão
Para habilitar um manipulador específico, crie uma subchave sob a subchave do tipo de manipulador de extensão com o nome desse manipulador. O Shell não usa o nome do manipulador, mas deve ser diferente de todos os outros nomes sob essa subchave de tipo. Defina o valor padrão da subchave de nome como a forma de cadeia de caracteres do GUID do manipulador.
O exemplo a seguir ilustra entradas do Registro que habilitam manipuladores de extensão de menu de atalho e de folha de propriedades, usando como exemplo o tipo de arquivo .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}
Tópicos relacionados: