从 USB 打印机记录原始数据并使用打印后台处理程序

Posted

技术标签:

【中文标题】从 USB 打印机记录原始数据并使用打印后台处理程序【英文标题】:Logging raw data from usb printer and using print spooler 【发布时间】:2014-08-15 20:09:12 【问题描述】:

我知道之前有人问过类似的问题,比如here 和其他一些地方。 但我想问一些关于基本概念的问题。

所以,我被分配了一个项目,我必须制作一个“usb logger”。该项目的主要功能是在记录仪软件上捕获从PC传输到Usb打印机的数据,以便将每次打印输出的原始数据保存到文件中进行记录和分析。

有人告诉我我可以使用第三方工具,例如usbpcap,但我建议我们为什么不直接从打印后台处理程序获取数据。据我所知,打印后台处理程序维护要打印的数据队列。

在我开始做这个项目之前,我想问几个基本问​​题

1) 在这种情况下什么是原始数据?

2) 我可以通过直接从 spooler 获取此功能还是有其他方法。

3) 哪一个需要更多的电脑资源与 USB 端口或 spooler 通信?

我只需要完全了解该领域。 (我将使用 C# 开发这个项目)

谢谢

【问题讨论】:

您可以在假脱机程序到达 USB 端口之前从假脱机程序中捕获此数据,但如何继续的问题取决于您打算如何处理这些数据。如果您从 USB 捕获它,您将获得旨在被该打印机理解的原始数据。它可以是 Postscript、PCL、原始位图或完全不同的打印机专有的东西。这几乎可以肯定是很难做到的。捕获假脱机文件数据可能更简单,但您想用这些数据做什么? 我只想维护通过 USB 打印机打印的数据的日志。我的方法正确吗? 当您说打印数据的日志时,您是什么意思?以原始形式捕获到打印机的整个实际输出?或者只是摘要信息,例如谁打印、何时、何地等? 以原始形式捕获整个输出。 【参考方案1】:

如果您需要以原始形式捕获整个输出,最简单的方法是使用端口监视器。端口监视器位于假脱机程序和物理输出设备之间,并将原始数据写入该设备,因此它是捕获此类数据的自然场所。

您需要做的是安装 Windows WDK 并查看示例端口监视器。您应该能够通过很少的修改来使用它。主要是,除了将数据写入打印机之外,您只需添加代码即可将数据写入某个文件。您还需要更改所有处理注册表的代码,因为示例假定它是默认端口监视器并写入为 Windows 保留的注册表项。

请注意版本 4 打印驱动程序(即 Win8)不支持自定义端口监视器。但是,Win8 仍然支持 v3 打印驱动程序,它应该涵盖目前所有的打印机。

【讨论】:

以上是关于从 USB 打印机记录原始数据并使用打印后台处理程序的主要内容,如果未能解决你的问题,请参考以下文章

在linux上通过usb发送原始数据

通过 USB 将原始文本发送到打印机

如何通过 CreateFile 获取用于原始直接打印的 USB 打印机文件名? [关闭]

如何通过 USB 使用 C# 将原始 IPL 发送到 intermec pm4i 打印机

从 SQL 数据库中检索记录并以 HTML 格式打印(通过 Python)

如何用Lodop能过USB热敏打印机打开钱箱