如何创建自己的XP打印机驱动程序

12

我如何创建自己的XP打印机驱动程序,以执行以下操作:

  • 打印到文件(可能是XPS格式)
  • 将此文件放入受密码保护的ZIP文件中
  • 将zip文件发送到配置的电子邮件地址
4个回答

18
你需要的不是打印机驱动程序,而是一个名为“Print Monitor”的DLL文件。它会在Spooler.exe进程中加载。该DLL在初始化阶段提供了类似于LPT1:,FILE:,SPSPort:等端口的逻辑名称。由打印机驱动程序准备好的输出必须以某种方式发送到目标设备。这项工作由打印监视器(如“标准TCP / IP端口”或“本地端口”)完成。
要编写打印机监视器,您需要下载并安装Windows Driver Kit(WDK或一些时间前的DDK,请参见http://www.microsoft.com/whdc/devtools/WDK/default.mspx)。有关编写打印机监视器的更多信息,请参见http://msdn.microsoft.com/en-us/library/ff563806(v=VS.85).aspx。Print Monitor是具有一些导出函数的DLL(请参见http://msdn.microsoft.com/en-us/library/ff549405(v=VS.85).aspx)。我建议您从修改本地监视器示例LocalMon开始,您可以在安装WDK后找到其完整源代码(请参见http://msdn.microsoft.com/en-us/library/ff556478(v=VS.85).aspx)。

编写打印机监视器最实际的问题是需要编写真正的多线程DLL。您必须非常小心,了解并在所有函数中使用EnterCriticalSection。对于打印机监视器的调试,您应该将Visual Studio Debugger连接到进程Spooler。其余部分与编写运行标准Windows Win32 / Win64 DLL相同。

更新:还有一个小提示。如果您不希望打印机驱动程序对发送到打印机的数据进行任何操作,则可以使用通用打印机驱动程序。您会在“通用”制造商下找到它,打印机名称为“通用/仅文本”。检查一些驱动程序设置(如CR LF设置)。


这是正确的答案,我已经做过类似的事情。但是你不要在 spooler 进程内做更多的事情:在获取数据后,启动一个新进程来执行压缩和发送电子邮件的操作。 - egrunin
@egrunin:在单独的进程中执行更复杂的工作是个好建议!我很多年前也写过一个打印监视器,可以说最复杂的问题是在多线程和多用户环境下进行调试。启动单独的进程可以使调试变得更容易。 - Oleg
这篇文章中的所有链接都已失效。有可能更新吗? - Nicolai Lissau
2
@Attaque:当前版本的WDK可以从这里下载。打印监视器的文档目前在这里。关于WDK中LOCALMON示例的参考资料在这里。链接可能会在几年后失效,但是可以通过搜索我在答案中使用的术语(如“打印机监视器”或“端口监视器”)在互联网上找到相关信息。 - Oleg
链接已经恢复正常。可能是我的网络连接问题。我很抱歉。 - Nicolai Lissau

3

虽然我不能提供具体的建议,但如果我想做你描述的事情,第一件事就是阅读PDFCreator的源代码——它是一个Windows打印驱动程序,可以生成PDF文件。


4
PDFCreator内部使用RedMon(http://pages.cs.wisc.edu/~ghost/redmon/)来捕获打印数据。直接使用RedMon,它也是一个开源项目,作为端口监视器工作。 - Jason
@Jason:+1 - 我特别推荐redmon。事实上,你应该将其作为答案提交。 - Stobor

2

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接