“另存为”对话框显示在打印到 XPS 文档编写器的应用程序后面
本文可帮助你解决以下问题: “另存为 ”对话框隐藏在打印到 XPS 文档编写器打印机的应用后面,并且应用程序停止响应。
原始产品版本: XPS 文档编写器
原始 KB 编号: 2567869
症状
请考虑以下情况:
- 在 64 位版本的 Windows 7 上运行 32 位应用程序。
- 从应用程序打印到 Microsoft XPS 文档编写器 (MXDW) 打印机。 在此方案中,“ 另存为 ”对话框显示在应用程序后面。
此外,你可能会遇到以下症状:
- 应用程序似乎停止响应 (挂起) ,直到输入文件名或取消打印任务。
- 关闭“ 另存为 ”对话框时,打印的应用程序不会成为前台 (活动) 应用程序。
注意
打印到驱动程序显示“ 另存为 ”对话框或其他模式对话框的其他打印机时,也可能会出现此问题。 Adobe PDF 打印机的打印机驱动程序是此类驱动程序。
原因
打印机驱动程序作为动态链接库实现, (加载到打印进程中的 DLL) 。 打印机驱动程序在 64 位版本的 Windows 上实现为 64 位 DLL,在 32 位版本的 Windows 上实现为 32 位 DLL。
32 位进程无法加载 64 位 DLL。 因此,64 位版本的 Windows 支持从 32 位进程打印到 Splwow64.exe 进程。 Splwow64.exe 是一个 64 位进程,可以加载 64 位打印机驱动程序,并处理 32 位进程的打印。
当应用程序调用 StartDoc
函数以打印到 XPS 文档编写器打印机时,XPS 文档编写器打印机驱动程序将显示 “另存为 ”对话框,以便用户可以指定 XPS 文件的名称和位置。 对话框的所有者窗口通常是调用 StartDoc
函数的线程的活动窗口,该对话框将显示在活动窗口中。
当 32 位应用程序在 64 位版本的 Windows 上调用 StartDoc
函数时,Splwow64.exe 进程调用 32 位应用程序的 XPS 文档编写器打印机驱动程序。 在这种情况下, “另存为 ”对话框是未拥有的,因为 Splwow64.exe 进程中的线程没有活动窗口。 对话框可能会出现在打印的应用程序后面,因为 Splwow64.exe 进程没有设置前台窗口的权限。 此外,由于对话是无人拥有的,因此在关闭对话框时,调用 StartDoc
函数的应用程序可能不会成为前台应用程序。
在 StartDoc
关闭对话框之前,调用不会返回,因此应用程序可能似乎停止响应。
如果“ 另存为 ”对话框是由 Splwow64.exe 进程创建的,则 Windows 资源管理器任务栏中有其自己的按钮。 这是因为对话框是无所有者的。 当 Splwow64.exe 进程无法设置前台窗口时,任务栏按钮也会闪烁。
解决方法
若要解决此问题,可以通过任务栏按钮访问“ 另存为 ”对话框。 或者,可以按 Alt+Tab 将焦点切换到对话框。
更多信息
软件开发人员可以通过让这些应用程序检测用户何时打印到 XPS 文档编写器打印机或 Adobe PDF 打印机来避免此问题。 然后,应用程序在调用 StartDoc
函数时指定结构成员中DOCINFO.lpszOutput
文件的完整路径。 打印机驱动程序将使用指定的文件,而不是提示用户输入文件。
第三方信息免责声明
本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 不对这些产品的性能或可靠性提供任何明示或暗示性担保。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈