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.
Os manipuladores de visualização são chamados quando um item é selecionado para mostrar uma visualização leve, rica somente leitura do conteúdo do arquivo no painel de leitura do modo de exibição. Isso é feito sem iniciar o aplicativo associado ao arquivo.
Este tópico aborda os seguintes tópicos:
- Preview Handler Architecture
- Opções de modelo de servidor
- Inicialização
- Fluxo de Dados do Manipulador de Pré-visualização
- Depurando um manipulador de visualização
- Fornecendo seu próprio processo para um manipulador de visualização
- Tópicos relacionados
Arquitetura do gestor de pré-visualização
Um manipulador de visualização é um aplicativo hospedado. Os anfitriões incluem o Explorador do Windows no Windows Vista ou no Microsoft Outlook 2007. Os hosts implementam IPreviewHandlerFrame como um método de comunicação entre o manipulador de visualização e o host.
O próprio manipulador de visualização implementa estas interfaces:
- IInitializeWithStream
- IObjectWithSite
- IOleWindow
- IPreviewHandler
- IPreviewHandlerVisuals (opcional)
Seu manipulador é chamado através do seu IObjectWithSite, que retorna um ponteiro IUnknown, através do qual o utilizador solicita um objeto IPreviewHandlerFrame para interagir com o host.
Opções de modelo de servidor
Os manipuladores de visualização sempre são executados fora do processo. Existem dois métodos para o implementar:
- Um manipulador de visualização pode ser criado como um servidor em processo, mas executado através de um host substituto fora do processo. Este é o método preferido. O sistema fornece um host substituto para isso no arquivo Prevhost.exe. Os manipuladores de visualização criados por esse método não são compatíveis com o Outlook 2007 no Windows XP. No entanto, esses mesmos manipuladores funcionarão no Windows Explorer e no Outlook 2007 em execução no Windows Vista.
- Um manipulador de visualização pode ser criado como um servidor COM (Component Object Model) local. Isto não é recomendado por várias razões. Primeiro, a implementação de um servidor em processo é mais fácil. Mais importante ainda, a implementação como um servidor em processo fornece maior controle sobre a vida útil do objeto manipulador, o que permite uma melhor limpeza e eficiência.
Por padrão, os manipuladores de visualização são executados em um processo de baixo nível de integridade (IL) por motivos de segurança. Opcionalmente, você pode desabilitar a execução como um processo de IL baixa definindo o seguinte valor no Registro. No entanto, não é recomendado fazê-lo. Os sistemas podem eventualmente ser configurados para rejeitar qualquer processo que não seja de baixa IL.
HKEY_CLASSES_ROOT
CLSID
{YOUR HANDLER'S CLSID}
DisableLowILProcessIsolation [DWORD] = 1
Manipuladores de visualização diferentes compartilham o mesmo processo por padrão. Duas instâncias de Prevhost.exe podem ser executadas simultaneamente: uma para manipuladores que executam como processos de baixo IL, e outra para manipuladores que optaram por não seguir esse comportamento.
Inicialização
Assim como acontece com os manipuladores de miniaturas e propriedades, é altamente recomendável inicializar o manipulador com um fluxo. Você pode inicializar por meio de um arquivo ou item, se necessário, mas os fluxos fornecem a maneira mais segura de implementar um manipulador. A inicialização por meio de um fluxo garante a integridade do arquivo e os benefícios de estabilidade para o sistema de executar o manipulador como um processo de IL baixo, como proteger o sistema contra saturações de buffer, limitar onde um manipulador pode gravar informações e limitar a comunicação com outras janelas.
Se você precisar inicializar com um arquivo ou item do Shell, armazene o caminho do arquivo ou uma referência ao IShellItem. Não leia dados dessas fontes até que IPreviewHandler::DoPreview seja chamado.
Em geral, a inicialização não deve fazer nenhum trabalho pesado, como compor e armazenar uma imagem de visualização. Para uma eficiência ótima, esse tipo de processamento não deve ser realizado até que a pré-visualização seja necessária.
Pré-visualização do fluxo de dados do manipulador
O fluxo de dados no processo de visualização segue o caminho geral mostrado aqui. O anfitrião pode ser pensado como o Windows Explorer no Windows Vista ou o Outlook 2007.
- O manipulador de visualização é inicializado, de preferência com um fluxo.
- A janela de exibição é passada do host para o manipulador através do IPreviewHandler::SetWindow.
- Neste ponto, o manipulador não deve fazer mais nada até que IPreviewHandler::DoPreview seja chamado.
- A visualização é exibida no painel de leitura por meio de uma chamada para IPreviewHandler::DoPreview.
- O tamanho da janela é definido através de IPreviewHandler::SetRect.
- A janela é redimensionada quando necessário através IPreviewHandler::SetRect.
- A visualização é descarregada e seus recursos liberados quando não são mais necessários, por meio de uma chamada para IPreviewHandler::Unload.
Depurando um manipulador de pré-visualização
Se seguiste as recomendações para implementar o teu manipulador de pré-visualização como um servidor em processo, para depurar o teu manipulador de pré-visualização, podes associar a Prevhost.exe. Como mencionado anteriormente, esteja ciente de que pode haver duas instâncias de Prevhost.exe, uma para processos normais de nível baixo de IL e outra para os manipuladores que optaram por não executar em um nível baixo de IL.
Se você não encontrar Prevhost.exe em sua lista de processos disponíveis, provavelmente não foi carregado nesse ponto. Clicar em um arquivo para uma visualização carrega o substituto e ele deve aparecer como um processo anexável.
Fornecendo seu próprio processo para um manipulador de visualização
Se você quiser forçar a criação de um novo processo para seu manipulador em vez de executar sob o processo padrão, crie uma nova subchave para seu manipulador sob AppID e defina sua entrada DllSurrogate como "Prevhost.exe". Use essa subchave AppID em vez do Prevhost.exe padrão AppID.
Ao fornecer um novo processo, o manipulador pode evitar a execução em um processo compartilhado, como faria por padrão. Isso pode permitir, por exemplo, que você garanta a versão específica do Common Language Runtime (CLR) no processo. Isso é necessário se você estiver criando uma implementação gerenciada de um manipulador de visualização.
Observação
Os manipuladores de visualização de 32 bits devem usar AppID {534A1E02-D58F-44f0-B58B-36CBED287C7C} quando instalados em sistemas operacionais de 64 bits.
Tópicos relacionados