Winapi - 用户打印文件时的回调

时间:2014-01-08 15:34:02

标签: c# c winapi printing hook

任务是创建用户从特定计算机发送的所有.pdf打印作业的日志。打印文件后,我想打开文件(以编程方式)并从中提取一些信息。

我知道我可以使用Print Spooler API检索所有打印机的列表,然后使用GetJob()查找有关新作业的信息。但是,JOB_INFO结构不包含完整的文件路径,但这也是我打开文件所需要的。这是有道理的,因为我也可以直接从任何程序发送打印作业,而根本没有任何实际文件。

有没有办法挂钩到默认的打印对话框?或者也许是“打印...” - Windows资源管理器中的按钮?不确定从哪里开始寻找,我会很高兴能得到任何暗示。

理想情况下,在C#中,但任何语言都可以。

1 个答案:

答案 0 :(得分:1)

打印监视器的想法听起来不错,但我现在已经采用了另一种(可能更简单)的方式。

  1. 在“Recent”目录中枚举新的.lnk文件。 (Environment.SpecialFolder
  2. 分析文件名以检查它是否是.pdf文件。
  3. 如果是,请枚举所有打印机的打印作业,以查看是否有一个作业的文件名与最近打开的文件的名称相匹配。
  4. 如果有这样的工作,follow the .lnk to the destination。这是打印文件。
  5. 这取决于在打印之前必须使用PDF查看器打开.pdf文件的事实。该方法需要定期检查所有打印作业和最近的文件,但这可能是相当高性能的。