A caixa de diálogo Salvar como é exibida por trás do aplicativo que está imprimindo para o Gravador de Documentos XPS

Este artigo ajuda você a resolve um problema em que a caixa de diálogo Salvar como está oculta atrás do aplicativo que está imprimindo em uma impressora XPS Document Writer e o aplicativo para de responder.

Versão original do produto: Gravador de Documentos XPS
Número de KB original: 2567869

Sintomas

Considere o seguinte cenário:

  • Você executa um aplicativo de 32 bits em uma versão de 64 bits do Windows 7.
  • Você imprime do aplicativo para uma impressora MXDW (Microsoft XPS Document Writer). Nesse cenário, a caixa de diálogo Salvar como é exibida por trás do aplicativo.

Além disso, você pode experimentar os seguintes sintomas:

  • O aplicativo parece parar de responder (trava) até que você insira um nome de arquivo ou cancele a tarefa de impressão.
  • O aplicativo que está imprimindo não se torna o aplicativo em primeiro plano (ativo) quando a caixa de diálogo Salvar Como é fechada.

Observação

Esse problema também pode ocorrer quando você imprime em uma impressora diferente cujo driver exibe a caixa de diálogo Salvar como ou outra caixa de diálogo modal. O driver de impressora da impressora PDF do Adobe é esse tipo de driver.

Motivo

Os drivers de impressora são implementados como DLLs (bibliotecas de link dinâmico) que são carregadas em um processo que está sendo impresso. Os drivers de impressora são implementados como DLLs de 64 bits em versões de 64 bits do Windows e como DLLs de 32 bits em versões de 32 bits do Windows.

Um processo de 32 bits não pode carregar DLLs de 64 bits. Portanto, versões de 64 bits do Windows dão suporte à impressão de processos de 32 bits por meio do processo de Splwow64.exe. Splwow64.exe é um processo de 64 bits que pode carregar drivers de impressora de 64 bits e que manipula a impressão para processos de 32 bits.

Quando um aplicativo chama a StartDoc função para imprimir na impressora XPS Document Writer, o driver de impressora do Gravador de Documentos XPS exibe uma caixa de diálogo Salvar como para que os usuários possam especificar o nome e o local do arquivo XPS. A janela do proprietário da caixa de diálogo normalmente é a janela ativa do thread que está chamando a StartDoc função e a caixa de diálogo será exibida na janela ativa.

Quando um aplicativo de 32 bits chama a StartDoc função em uma versão de 64 bits do Windows, o processo Splwow64.exe chama o driver de impressora do Gravador de Documentos XPS para o aplicativo de 32 bits. Nesse cenário, a caixa de diálogo Salvar como é semeada porque o thread no processo de Splwow64.exe não tem uma janela ativa. A caixa de diálogo pode aparecer por trás do aplicativo que está imprimindo porque o processo de Splwow64.exe não tem permissão para definir a janela em primeiro plano. Além disso, como a caixa de diálogo não é semeada, o aplicativo que chamou a StartDoc função pode não se tornar o aplicativo em primeiro plano quando a caixa de diálogo é fechada.

A StartDoc chamada não retorna até que a caixa de diálogo seja descartada, portanto, o aplicativo pode parecer parar de responder.

A caixa de diálogo Salvar como tem seu próprio botão na barra de tarefas do Windows Explorer se ela for criada pelo processo Splwow64.exe. Isso ocorre porque a caixa de diálogo não é semeada. O botão da barra de tarefas também pisca quando o processo de Splwow64.exe não pode definir a janela em primeiro plano.

Solução alternativa

Para contornar esse problema, você pode acessar a caixa de diálogo Salvar como por meio do botão da barra de tarefas. Ou você pode pressionar Alt+Tab para alternar o foco para a caixa de diálogo.

Mais informações

Os desenvolvedores de software podem evitar esse problema em seus aplicativos de 32 bits, fazendo com que esses aplicativos detectem quando o usuário está imprimindo na impressora XPS Document Writer ou na impressora ADOBE PDF. Em seguida, o aplicativo especifica o caminho completo para um arquivo no membro da DOCINFO.lpszOutput estrutura ao chamar a StartDoc função. O driver da impressora usará o arquivo especificado em vez de solicitar ao usuário um arquivo.

Aviso de isenção de responsabilidade para informações de terceiros

Os produtos de terceiros mencionados neste artigo são produzidos por empresas independentes da Microsoft. A Microsoft não oferece nenhuma garantia, implícita ou não, do desempenho ou da confiabilidade desses produtos.