打印时获取文件名

时间:2011-02-01 11:40:02

标签: windows printing

当用户从打印机事件中的任何应用程序打印时,有没有办法检测文件的文件名?我正在寻找一个Windows api,我可以确定正在打印的文件。

3 个答案:

答案 0 :(得分:2)

使用名称打开打印jibs,但通常这并不意味着文件名 - 通过直接查询打印机驱动程序可以访问打印队列中显示的名称。

答案 1 :(得分:1)

打印机驱动程序没有任何用于查找文件名的外部API。我假设你会考虑创建某种类似于systray代理的应用程序,它将监视正在发送的作业的打印队列。如果是的话 -

  1. 有关允许您监控打印作业状态的打印队列的Microsoft工具,请参阅http://support.microsoft.com/kb/196805
  2. 请参阅http://msdn.microsoft.com/en-us/library/ff562742%28v=vs.85%29.aspx,其中说明了Windows如何支持打印机更改通知。您可以创建一个注册此应用程序的应用程序并获取打印队列的句柄。获得句柄后,可以调用GetPrinter和GetJob API来访问JOB_INFO_2结构。 JOB_INFO_2结构中的pDocumentName是文件的名称
  3. 希望这会有所帮助。如果是,请投票+1:)

答案 2 :(得分:1)

不,没有,至少不可靠。请记住,可能根本没有文件名。例如,我可以打开像记事本这样的应用程序,键入一些东西,然后打印。我打印什么文件?没有。

在上面的场景中,大多数应用程序将提供某种默认文件名,例如"无标题",有时您可以通过解析打印作业的名称来找到该名称。例如,如果您致电GetJob,则JOB_INFO_1结构pDocument成员将包含指向打印作业名称的指针,该名称通常包含文件名。

但是,每个应用程序的格式都不同,有些应用程序根本不提供。所以答案是你可以在75%的时间内找到文件名并付出很多努力,但根本就没有100%的解决方案。