c++ - 在 C++ 中捕获 Windows 打印作业

标签 c++ windows printing spooler

问题

我有一台连接了打印机的 Windows XP 电脑。这台电脑运行一个软件,我从那里创建打印作业并将打印作业发送到打印机。最近,打印机坏了,我没办法买新的。该程序被配置为打印到这台特定的打印机,现在这是一个问题。

问题

有没有办法捕获发送到 Windows 后台打印程序的数据?根据我的发现,我必须开发一个打印监视器(将由 spooler.exe 读取的 .dll 文件,如果我错了请纠正我),但是对于这样的事情来说这似乎过于复杂了。我一直在搜索 Print Spooler API,但据我所知,GetJob 方法仅返回有关打印作业的信息,而不是打印的实际数据。

我想捕获这些数据,然后在我自己制作的另一个程序中处理它。这不是真正的问题,我更关心的是是否有可能从打印后台处理程序中捕获数据,如果可能的话,还有一些关于如何做到这一点的提示。

谢谢。

最佳答案

你的问题比你想象的要严重。将假脱机打印机数据传输到特定打印机的任务称为打印处理器,它位于打印监视器之前的打印机链中。此处的文档:http://msdn.microsoft.com/en-us/library/windows/hardware/ff551771%28v=vs.85%29.aspx

假脱机数据可以是几种不同格式中的一种,对于其中一些格式,可能无法重定向到不同类型的打印机。你没有提到你正在处理什么类型的打印机。

这是相当严肃的事情:编写和调试其中一个婴儿需要大量的低级技能和对 Windows 技术的理解。

编辑:数据很可能是增强型图元文件格式,您需要利用内置转换器将其转换为新打印机的命令。

关于c++ - 在 C++ 中捕获 Windows 打印作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22379426/

相关文章:

Windows Shell 脚本 - 关闭命令提示符

c# - 从 C# ASP.NET 应用程序进行远程和本地打印

c++ - 是否将 “flags”常量视为好样式? (C++)

c++ - 如何包含头文件

c++ - QueryPerformanceCounter 的性能影响

java - 如何从java打印excel文件?

c# - 是否可以从 Windows 服务打印 PDF 文档?

c++ - 如何在 C++ 中编写类似 java 的参数级接口(interface)实现?

c++ - 在编译时将强类型枚举器转换为其基础类型?

c# - 如何以编程方式停止 Windows 服务