有时这是由于x64 Windows中在32位应用程序和64位驱动程序之间的交互方面的设计限制所致。除了打印对话框外,发生这种情况的另一种常见情况是使用32位Internet Explorer和智能卡对话框时。
Microsoft在此处提供有关该原因的一些背景信息:
当您在Windows 7 64位版本上打印到XPS Document Writer打印机时,“另存为”对话框将出现在32位应用程序的后面
http://support.microsoft.com/kb/2567869
打印机驱动程序被实现为动态链接库(DLL),该库已加载到正在打印的进程中。在Windows 64位版本上,打印机驱动程序被实现为64位DLL。在Windows 32位版本上,打印机驱动程序实现为32位DLL。
32位进程无法加载64位DLL。因此,Windows的64位版本支持通过Splwow64.exe进程从32位进程进行打印。Splwow64.exe是一个64位进程,可以加载64位打印机驱动程序并代表32位进程处理打印。
当应用程序调用StartDoc函数以打印到XPS Document Writer打印机时,XPS Document Writer打印机驱动程序将显示“另存为”对话框,以便用户可以指定XPS文件的名称和位置。对话框的所有者窗口通常是调用StartDoc函数的线程的活动窗口,并且该对话框将出现在活动窗口上方。
当32位应用程序在Windows 64位版本上调用StartDoc函数时,Splwow64.exe进程将代表32位应用程序调用XPS Document Writer打印机驱动程序。在这种情况下,“另存为”对话框是不存在的,因为Splwow64.exe进程中的线程没有活动的窗口。此外,该对话框可能会出现在正在打印的应用程序后面,因为Splwow64.exe进程没有权限设置前台窗口。
在关闭对话框之前,不会返回StartDoc调用,因此该应用程序似乎停止响应。
如果“另存为”对话框是由Splwow64.exe进程创建的,则在Windows资源管理器任务栏中有其自己的按钮。这是因为对话框是无主的。当Splwow64.exe进程无法设置前台窗口时,任务栏按钮也会闪烁。