任务是创建用户从特定计算机发送的所有.pdf打印作业的日志。一旦文件被打印,我想打开文件(编程)并从中提取一些信息。
我知道我可以使用Print Spooler API检索所有打印机的列表,然后使用GetJob()查找有关新作业的信息。然而,JOB_INFO结构不包含完整的文件路径,这将是我打开文件所需要的。这很有意义,因为我也可以直接从任何程序发送打印作业,而不需要任何实际文件。
有没有办法连接到默认的打印对话框?或者windows资源管理器中的“打印…”按钮?不知道从哪里开始找,我很高兴能得到任何提示。
最好用C#,但任何语言都可以。
最佳答案
使用打印监视器的想法听起来不错,但我现在换了一种方式(可能更简单)。
枚举“Recent”目录中的新.lnk文件。(Environment.SpecialFolder)
分析文件名以检查它是否是.pdf文件。
如果是,请枚举所有打印机的打印作业,以查看是否存在文件名与最近打开的文件名匹配的作业。
如果有这样的工作,follow the .lnk to the destination。这是打印的文件。
这取决于.pdf文件在打印之前必须用pdf查看器打开。但是,该方法要求定期检查所有打印作业和最新文件,这可能会对性能造成很大影响。
关于c# - Winapi-用户打印文件时的回调,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20999926/