Compartilhar via


Como implementar manipuladores de sobreposição de ícones

Manipuladores de sobreposição de ícones são objetos COM (Component Object Model) em processo, implementados como DLLs. Eles exportam uma interface além de IUnknown: IShellIconOverlayIdentifier. Essa interface tem três métodos: IShellIconOverlayIdentifier::GetOverlayInfo, IShellIconOverlayIdentifier::GetPriority e IShellIconOverlayIdentifier::IsMemberOf.

Instruções

Etapa 1: Implementando GetOverlayInfo

O método GetOverlayInfo é chamado pela primeira vez durante a inicialização. O método retorna o caminho totalmente qualificado do arquivo que contém a imagem de sobreposição do ícone e seu índice baseado em zero dentro do arquivo. Em seguida, o Shell adiciona a imagem à lista de imagens do sistema. As sobreposições de ícone podem ser contidas em qualquer um dos tipos de arquivo padrão, incluindo .exe, .dll e .ico.

Após a conclusão da inicialização, o Shell chama GetOverlayInfo quando precisa exibir a sobreposição de ícone do manipulador. O método deve retornar o mesmo nome de arquivo e índice que ele fez durante a inicialização. Embora o Shell use a imagem armazenada em cache na lista de imagens do sistema em vez de carregar a imagem do arquivo, uma sobreposição de ícone ainda é identificada por seu nome de arquivo e índice.

Etapa 2: Implementando GetPriority

O método GetPriority é chamado somente durante a inicialização. Ele atribui um valor de prioridade à sobreposição de ícone do manipulador. O valor pode variar de zero a 100, em que 100 é a prioridade mais baixa. A finalidade desse valor de prioridade é ajudar o Shell a resolve o conflito que surge quando várias sobreposições de ícone são especificadas para um único objeto. O Shell primeiro usa um conjunto interno de regras para determinar a sobreposição de ícone de prioridade mais alta. Se essas regras não resolve o conflito, os valores atribuídos às sobreposições de ícone por GetPriority determinarão a prioridade.

O valor de prioridade definido por GetPriority não é uma maneira confiável de resolve conflitos entre manipuladores de sobreposição de ícone não relacionados. Não há como o manipulador determinar quais valores de prioridade outros manipuladores estão usando. Normalmente, você deve definir o valor como zero. No entanto, o valor de prioridade é útil quando você implementa dois ou mais manipuladores de sobreposição de ícones que podem solicitar ícones de sobreposição de ícones para o mesmo objeto. Definindo os valores de prioridade adequadamente, você pode especificar quais das sobreposições de ícone solicitadas serão exibidas.

Etapa 3: Implementando IsMemberOf

O Shell chama o método IsMemberOf para determinar se ele deve exibir a sobreposição de ícone de um manipulador para um objeto específico. O Shell especifica o objeto passando seu nome para o método . Se um manipulador quiser que sua sobreposição de ícone seja exibida, IsMemberOf retornará S_OK. Caso contrário, ele retornará S_FALSE.

Os manipuladores de sobreposição de ícones normalmente se destinam a trabalhar com um grupo específico de arquivos. Um exemplo típico é um tipo de arquivo, identificado por uma extensão de nome de arquivo específica. Um manipulador de sobreposição de ícones pode solicitar uma sobreposição de ícone para todos os arquivos do tipo de arquivo. Alguns manipuladores solicitam uma sobreposição de ícone somente se um arquivo do tipo de arquivo estiver em um estado específico. No entanto, os manipuladores de sobreposição de ícones são livres para solicitar sua sobreposição de ícone para qualquer objeto que escolherem.