Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Um objeto 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ê criar ou alterar um manipulador de extensão do 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 pode não ser reconhecida até que o sistema seja reinicializado.
Existem alguns fatores adicionais que se aplicam aos sistemas Windows 2000. Para obter detalhes, consulte a seção Registrando manipuladores de extensão de shell em sistemas Windows 2000.
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 Windows Software Development Kit (SDK). 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, deve-se também criar uma subchave InprocServer32 debaixo da subchave GUID com o valor (Default) definido como o caminho da DLL do manipulador. Use o modelo de rosca de apartamento. Um exemplo é mostrado aqui:
HKEY_CLASSES_ROOT
CLSID
{00021500-0000-0000-C000-000000000046}
InprocServer32
(Default) = %windir%\System32\Example.dll
ThreadingModel = Apartment
Sempre que o Shell executa uma ação que pode envolver um manipulador de extensão do Shell, ele verifica a subchave do Registro apropriada. 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 contexto ativado quando o Shell exibe um menu de contexto para um membro de um tipo de arquivo . Nesse caso, o manipulador deve ser registado sob a subchave ProgID do tipo de arquivo.
Este tópico aborda os seguintes assuntos:
- Nomes do manipulador
- Objetos de shell predefinidos
- Exemplo de Registo de um Manipulador de Extensão
- Tópicos relacionados
Nomes dos manipuladores
Para habilitar um manipulador de extensão Shell, crie uma subchave com o nome da subchave do manipulador (veja abaixo) sob a subchave ShellEx de ProgID (para tipos de arquivo) ou sob o nome do tipo de objeto 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 abaixo da subchave "Nome da subchave do manipulador" nomeada como a versão da cadeia de caracteres do identificador de classe (CLSID) da extensão do Shell. Várias extensões podem ser registradas sob o nome da subchave do manipulador criando várias subchaves.
| Handler | Interface | Nome da subchave do manipulador |
|---|---|---|
| Manipulador do provedor de coluna | IColumnProvider | ColumnHandlers |
| Manipulador de menu de atalho | IContextMenu | ContextMenuHandlers |
| Manipulador Copyhook | ICopyHook | CopyHookHandlers |
| Manipulador de arrastar e soltar | IContextMenu | DragDropHandlers |
| Manipulador de ficha 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. Apenas uma extensão pode ser registrada para esses manipuladores.
| Manipulador | Interface | Nome da subchave do manipulador |
|---|---|---|
| Manipulador de dados | IDataObject | ManipuladorDeDados |
| Manipulador de drop | IDropTarget | DropHandler |
| Manipulador de ícones | IExtractIconA/W | IconHandler |
| Manipulador de imagens em miniatura | IThumbnailProvider | {E357FCCD-A995-4576-B01F-234630154E96} |
| Manipulador de dica de informações | IQueryInfo | {00021500-0000-0000-C000-000000000046} |
| Atalho do shell (ANSI) | IShellLinkA | {000214EE-0000-0000-C000-000000000046} |
| Link do comando (UNICODE) | IShellLinkW | {000214F9-0000-0000-C000-000000000046} |
| Armazenamento estruturado | IStorage | {0000000B-0000-0000-C000-000000000046} |
| 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 Pin ao Menu Iniciar e Pin à Barra de Tarefas ao menu de atalho de um item só são necessárias para tipos de ficheiro 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 sob a 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 ficheiros | Menu de Atalho, Folha de Propriedades, Verbos (veja abaixo) |
| AllFileSystemObjects | Todos os ficheiros e pastas de ficheiros | Menu de Atalho, Folha de Propriedades, Verbos |
| Pasta | Todas as pastas | Menu de Atalho, Folha de Propriedades, Verbos |
| Diretório | Pastas de ficheiros | Menu de Atalho, Folha de Propriedades, Verbos |
| Directory\Background | Fundo da pasta de ficheiros | Apenas menu de atalho |
| DesktopBackground | Fundo do ambiente de trabalho (Windows 7 e superior) | Menu de Atalho, Verbos |
| Drive | Todas as unidades em 'O 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 |
| Rede\Tipo\# | Todos os objetos do tipo # (veja abaixo) | Menu de Atalho, Folha de Propriedades, Verbos |
| NetShare | Todas as partilhas de rede | Menu de Atalho, Folha de Propriedades, Verbos |
| NetServer | Todos os servidores de rede | Menu de Atalho, Ficha de Propriedades, Verbos |
| network_provider_name | Todos os objetos fornecidos pelo provedor de rede "network_provider_name" | Menu de Atalho, Folha de Propriedades, Verbos |
| Impressoras | Todas as impressoras | Menu de Atalho, Folha de Propriedades |
| CD de Áudio | CD de áudio na unidade de CD | Apenas 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 arquivos é 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 sob HKEY_CLASSES_ROOT\Subchave\Shell\Verb.
- Para o Tipo de Rede \\#, "#" é um código de tipo de provedor de rede em decimal. O código de tipo de provedor de rede é a palavra alta de um tipo de rede. A lista de tipos de rede é dada 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\Network\Type\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 Networking estiver instalado, seu nome de provedor será "Microsoft Windows Network" e o network_provider_name correspondente será Microsoft_Windows_Network.
Exemplo de um registo de manipulador de extensão
Para habilitar um manipulador específico, crie uma subchave sob a subchave do tipo manipulador de extensão com o nome do 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 para a forma de cadeia de texto do GUID do manipulador.
O exemplo a seguir ilustra entradas do Registro que habilitam manipuladores de extensão de menu de atalho e ficha de propriedades, usando um tipo de arquivo .myp de exemplo.
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