El cuadro de diálogo Guardar como se muestra detrás de la aplicación que se imprime en el escritor de documentos XPS

Este artículo le ayuda a resolver un problema en el que el cuadro de diálogo Guardar como está oculto detrás de la aplicación que se imprime en una impresora xps document writer y la aplicación deja de responder.

Versión original del producto: Escritor de documentos XPS
Número de KB original: 2567869

Síntomas

Imagine la siguiente situación:

  • Ejecuta una aplicación de 32 bits en una versión de 64 bits de Windows 7.
  • Imprima desde la aplicación en una impresora microsoft XPS Document Writer (MXDW). En este escenario, se muestra el cuadro de diálogo Guardar como detrás de la aplicación.

Además, puede experimentar los siguientes síntomas:

  • La aplicación parece dejar de responder (bloquear) hasta que escriba un nombre de archivo o cancele la tarea de impresión.
  • La aplicación que imprime no se convierte en la aplicación en primer plano (activa) cuando se cierra el cuadro de diálogo Guardar como .

Nota:

Este problema también puede producirse al imprimir en una impresora diferente cuyo controlador muestra el cuadro de diálogo Guardar como u otro cuadro de diálogo modal. El controlador de impresora para la impresora Adobe PDF es este tipo de controlador.

Causa

Los controladores de impresora se implementan como bibliotecas de vínculos dinámicos (DLL) que se cargan en un proceso que está imprimiendo. Los controladores de impresora se implementan como archivos DLL de 64 bits en versiones de 64 bits de Windows y como archivos DLL de 32 bits en versiones de 32 bits de Windows.

Un proceso de 32 bits no puede cargar archivos DLL de 64 bits. Por lo tanto, las versiones de 64 bits de Windows admiten la impresión desde procesos de 32 bits a través del proceso de Splwow64.exe. Splwow64.exe es un proceso de 64 bits que puede cargar controladores de impresora de 64 bits y que controla la impresión para procesos de 32 bits.

Cuando una aplicación llama a la StartDoc función para imprimir en la impresora XPS Document Writer, el controlador de impresora XPS Document Writer muestra un cuadro de diálogo Guardar como para que los usuarios puedan especificar el nombre y la ubicación del archivo XPS. La ventana de propietario del cuadro de diálogo suele ser la ventana activa del subproceso que llama a la StartDoc función y el cuadro de diálogo aparecerá sobre la ventana activa.

Cuando una aplicación de 32 bits llama a la StartDoc función en una versión de 64 bits de Windows, el proceso de Splwow64.exe llama al controlador de impresora XPS Document Writer para la aplicación de 32 bits. En este escenario, el cuadro de diálogo Guardar como no está configurado porque el subproceso del proceso de Splwow64.exe no tiene una ventana activa. El cuadro de diálogo puede aparecer detrás de la aplicación que se está imprimiendo porque el proceso de Splwow64.exe no tiene permiso para establecer la ventana en primer plano. Además, dado que el cuadro de diálogo no está abierto, es posible que la aplicación que llamó a la StartDoc función no se convierta en la aplicación en primer plano cuando se cierre el cuadro de diálogo.

La StartDoc llamada no se devuelve hasta que se descarta el cuadro de diálogo, por lo que puede parecer que la aplicación deja de responder.

El cuadro de diálogo Guardar como tiene su propio botón en la barra de tareas del Explorador de Windows si lo crea el proceso de Splwow64.exe. Esto se debe a que el cuadro de diálogo está sin abrir. El botón de la barra de tareas también parpadea cuando el proceso de Splwow64.exe no puede establecer la ventana en primer plano.

Solución alternativa

Para solucionar este problema, puede acceder al cuadro de diálogo Guardar como a través de su botón de la barra de tareas. O bien, puede presionar Alt+Tab para cambiar el foco al cuadro de diálogo.

Más información

Los desarrolladores de software pueden evitar este problema en sus aplicaciones de 32 bits haciendo que estas aplicaciones detecten cuándo el usuario está imprimiendo en la impresora XPS Document Writer o en la impresora Adobe PDF. A continuación, la aplicación especifica la ruta de acceso completa a un archivo del miembro de estructura DOCINFO.lpszOutput al llamar a la StartDoc función. El controlador de impresora usará el archivo especificado en lugar de pedir al usuario un archivo.

Aviso de declinación de responsabilidades sobre la información de terceros

Los productos de otros fabricantes que se mencionan en este artículo han sido creados por compañías independientes de Microsoft. Microsoft no ofrece ninguna garantía, ya sea implícita o de otro tipo, sobre la confiabilidad o el rendimiento de dichos productos.