Noções básicas sobre extensões de namespace do shell

O Windows Explorer fornece uma representação gráfica do namespace shell combinado com ferramentas que permitem que os usuários interajam com objetos Shell. Com uma extensão de namespace, você pode pegar qualquer corpo de dados e fazer com que o Windows Explorer apresentá-los ao usuário como uma pasta virtual. Quando um usuário navega nessa pasta, seus dados são apresentados como uma hierarquia estruturada em árvore de pastas e arquivos, assim como o restante do namespace do Shell. Usuários e aplicativos podem interagir com o conteúdo dessa pasta virtual da mesma forma que com qualquer outro objeto de namespace. Este documento discute como criar uma extensão de namespace.

Como funciona uma extensão de namespace

Nos bastidores, cada pasta exibida pelo Windows Explorer é representada por um objeto COM (Component Object Model) chamado objeto folder. Sempre que o usuário interage com uma pasta ou seu conteúdo, o Shell se comunica com o objeto de pasta associado por meio de uma das várias interfaces padrão. Em seguida, o objeto de pasta faz o que for necessário para responder à ação do usuário e o Shell atualiza o windows Explorer exibição.

A maioria dos arquivos e pastas com as quais os usuários interagem fazem parte do sistema de arquivos ou de uma pasta virtual do sistema, como a Lixeira. Outra documentação discutiu como você pode personalizar o comportamento dessas pastas padrão para atender aos requisitos do aplicativo modificando o registro ou implementando manipuladores de extensão do Shell. No entanto, estender o Shell destas maneiras é mais útil quando suas informações podem ser prontamente empacotadas na forma de arquivos ou pastas normais do sistema de arquivos.

Há várias situações em que armazenar dados como uma coleção de pastas e arquivos do sistema de arquivos pode ser indesejável ou até mesmo impossível. Alguns exemplos desse tipo de dados incluem:

  • Uma coleção de itens que é empacotada com mais eficiência em um único arquivo, como um banco de dados.
  • Uma coleção de itens armazenados em um computador remoto que não tem um sistema de arquivos padrão do Windows. Um exemplo desses dados são as informações armazenadas em um PDA (assistente digital) pessoal ou em uma câmera digital.
  • Uma coleção de itens que não representam dados armazenados. Um exemplo desses dados são os links de impressora contidos na pasta Impressoras padrão.

Uma maneira de apresentar esse tipo de dados a um usuário é escrever um aplicativo para permitir que os usuários exibam e interajam com os vários itens. No entanto, se seus dados puderem ser apresentados como uma hierarquia de pasta/arquivo, grande parte da funcionalidade que você precisará implementar poderá ser serviços de interface do usuário que já são fornecidos pelo Windows Explorer. Uma abordagem muito mais eficiente pode ser escrever uma extensão de namespace e permitir que o Windows Explorer se torne sua GUI.

Para implementar uma extensão de namespace, suas informações devem ser organizadas como um namespace estruturado em árvore. Sua raiz de namespace é apresentada como uma pasta virtual no namespace shell. A pasta raiz e todas as subpastas e itens de dados se tornam parte do namespace do Shell e o Windows Explorer se torna sua interface do usuário. Assim, você pode apresentar suas informações ao usuário de maneira familiar e prontamente acessível com muito menos programação de interface do usuário do que seria necessário para um aplicativo personalizado.

Uma extensão de namespace consiste em dois componentes básicos:

  • Um gerenciador de dados
  • Uma interface entre o gerenciador de dados e o Windows Explorer

O primeiro componente da lista depende inteiramente de você. Você pode armazenar e gerenciar seus dados de qualquer maneira que seja mais eficaz. O segundo componente é o código necessário para empacotar seus dados como objetos de pasta e lidar com a interação com o Windows Explorer. O Windows Explorer pode chamar esses objetos para permitir que os usuários exibam e interajam com seus dados como se fossem uma coleção de pastas e arquivos. Os objetos de pasta da extensão de namespace devem interagir com o Windows Explorer como se fossem pastas normais. Antes de tentar implementar uma extensão de namespace, primeiro você deve entender como o Windows Explorer lida com um objeto de pasta.

O objeto de exibição de pasta do sistema padrão (DefView)

O Shell fornece uma implementação padrão da exibição de pasta, coloquialmente conhecida como DefView, para que você possa evitar grande parte do trabalho de implementar sua própria extensão de namespace. Como alguns recursos de exibição não podem ser obtidos por meio de exibições personalizadas, geralmente é recomendável que o objeto de exibição de pasta do sistema padrão seja usado no lugar de uma exibição personalizada. Para obter mais informações, consulte SHCreateShellFolderView.

Como o Windows Explorer interage com uma extensão de namespace

O Windows Explorer fornece aos usuários uma GUI que permite que eles executem uma variedade de tarefas, incluindo:

  • Navegando na hierarquia do namespace e exibindo o conteúdo das pastas.
  • Gerenciando o conteúdo do namespace movendo, excluindo e copiando objetos.
  • Recuperando uma variedade de informações sobre objetos.
  • Iniciando aplicativos.

A GUI do Windows Explorer tem cinco componentes básicos. A ilustração a seguir nomeia os componentes e mostra onde eles normalmente são exibidos no Windows Explorer.

ilustração mostrando componentes da interface do usuário do Windows Explorer

Quando um usuário exibe uma pasta que pertence a uma extensão de namespace no Windows Explorer, o objeto de pasta tem pelo menos controle parcial sobre o conteúdo de todas as cinco áreas.

Modo de exibição de árvore

A exibição de árvore fornece uma exibição de alto nível do namespace. Essa área hospeda um controle de exibição de árvore que pode exibir todas as pastas de namespace e a posição da pasta na hierarquia de namespace. Um usuário pode executar várias operações com a área de exibição de árvore, incluindo:

  • Exibindo ou ocultando o próximo nível no namespace.
  • Copiar, mover ou excluir pastas.
  • Clique com o botão direito do mouse em uma pasta para exibir um menu de atalho.
  • Selecionando uma pasta e exibindo seu conteúdo na exibição de pasta.

A exibição de árvore se comunica com objetos de pasta principalmente por meio de sua interface IShellFolder . Por exemplo, quando um usuário clica no sinal de adição (+) ao lado do ícone da pasta, o Windows Explorer expande a exibição para mostrar as subpastas da pasta. Para obter as informações necessárias para atualizar a exibição de árvore, o Shell faz várias chamadas para a interface IShellFolder do objeto de pasta para:

  • Solicite os atributos da pasta.
  • Enumerar o conteúdo da pasta.
  • Solicitar nomes de exibição para cada subpasta.
  • Solicite um ícone para exibir ao lado de cada pasta.

Em seguida, o Windows Explorer atualiza o modo de exibição de árvore para mostrar as subpastas da pasta selecionada. Se as subpastas tiverem subpastas, um caractere '+' será exibido ao lado do ícone de pasta. Há várias tarefas mais sofisticadas que um usuário também pode executar com o modo de exibição de árvore, incluindo:

  • Usando a Área de Transferência para recortar ou copiar uma pasta e colá-la em outra pasta.
  • Usando arrastar e soltar para recortar ou copiar uma pasta e solte-a em outra pasta.
  • Usando um mecanismo de pesquisa para pesquisar itens em uma pasta ou suas subpastas.
  • Modificando as propriedades da pasta.

Para obter uma discussão mais detalhada sobre como uma extensão de namespace lida com essas ações de usuário, consulte Implementando as Interfaces básicas de objeto de pasta.

Exibição de Pasta

Quando um usuário seleciona uma pasta, o conteúdo da pasta é exibido na exibição de pasta. Até certo ponto, a funcionalidade normal da exibição de pasta se sobrepõe à exibição de árvore. Os usuários podem mover ou copiar pastas, alterar as propriedades da pasta, exibir o conteúdo de uma subpasta, exibir um menu de atalho para uma pasta e assim por diante. No entanto, há algumas diferenças distintas entre a exibição de árvore e a exibição de pasta:

  • A exibição de pasta exibe apenas o conteúdo de uma única pasta, não parte ou toda a hierarquia de namespace.
  • A exibição de pasta exibe objetos de arquivo, bem como objetos de pasta.
  • A exibição de pasta pode exibir muito mais informações sobre objetos do que a exibição de árvore.
  • A exibição de pasta permite que as extensões de namespace tenham controle quase completo sobre quais informações são exibidas e como. Somente aspectos secundários da exibição de árvore, como ícones de pasta, podem ser modificados.

Ao contrário do modo de exibição de árvore, o Windows Explorer não controla diretamente o conteúdo da exibição de pasta. A exibição de pasta é uma área que o Windows Explorer fornece a objetos de pasta. Exibir e gerenciar o conteúdo de uma pasta na exibição de pasta é responsabilidade do objeto de pasta. Embora a maioria das exibições de pasta siga um formato bastante padrão, na verdade, há poucas limitações sobre o que pode ser exibido ou como. Um caso extremo é a pasta internet, que é um navegador completo.

Quando um usuário seleciona uma pasta que pertence à sua extensão de namespace, você cria uma janela e passa seu identificador para o Windows Explorer. Essa janela se torna um filho da janela de exibição de pasta. O Windows Explorer fornece as dimensões da janela de exibição de pasta, mas não coloca nenhuma restrição no conteúdo da janela filho. Em seguida, você pode usar a janela filho para exibir a exibição de pasta da pasta.

As extensões de namespace usam uma das duas abordagens para criar uma exibição de pasta:

  • Use a janela filho para hospedar um controle de exibição de lista . Esse controle permite que você exiba o conteúdo de uma pasta da mesma forma que o modo de exibição clássico do Windows Explorer.
  • Use a janela filho para hospedar um controle WebBrowser e usar um documento DHTML (HTML Dinâmico) para exibir o conteúdo da pasta.

Ambas as abordagens exibem uma exibição de pasta muito semelhante à exibida para pastas do sistema. No entanto, se você quiser usar um esquema de exibição diferente, estará livre para fazer isso.

Como a maioria dos aplicativos do Windows, o Windows Explorer fornece ao usuário uma coleção de ferramentas. Uma seleção completa de ferramentas está disponível por meio da barra de menus. As ferramentas mais usadas também são representadas por botões ou caixas de edição em uma barra de ferramentas. Ao contrário de muitos aplicativos do Windows, a barra de menus do Windows Explorer é, na verdade, um controle de barra de ferramentas que foi personalizado para se comportar como um menu convencional. Tanto a barra de menus quanto a barra de ferramentas são incorporadas em um controle rebar para permitir que os usuários organizem os controles individuais para atender às suas necessidades.

Por padrão, o Windows Explorer dá suporte a um conjunto padrão de botões e itens de menu, como Copiar e Propriedades. Sua extensão de namespace pode personalizar a barra de menus e as barras de ferramentas excluindo ferramentas padrão e adicionando ferramentas personalizadas. Quando o objeto de exibição de pasta é inicializado, o Windows Explorer passa um ponteiro para sua interface IShellBrowser. Essa interface dá suporte a vários métodos que você pode chamar para personalizar a barra de menus e a barra de ferramentas. Quando o usuário seleciona um dos itens de menu personalizados ou botões da barra de ferramentas, o Windows Explorer encaminha WM_COMMAND mensagens para itens personalizados de menu e barra de ferramentas para o procedimento de janela da janela filho.

Barra de Status

A barra Explorer status do Windows exibe informações sobre o objeto selecionado no momento. Sua extensão de namespace pode usar a barra de status para exibir status informações, como uma cadeia de caracteres de texto. Você pode personalizar a barra de status chamando IShellBrowser.