2011-02-01 89 views
1

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

回答

2

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

1

打印机驱动程序没有任何外部API来查找文件名。我假设你会研究创建某种类型的应用程序,这些应用程序将监视正在发送的作业的打印队列。如果是这样的 -

  1. 参考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是文件的名称

希望这有助于。如果是这样,请投票+1 :)

+0

您的链接#1死了,我谷歌的一些微软打印队列监视器,但我只是发现这个:http://technet.microsoft.com/en-us/library/cc784766%28v=ws.10%29。 aspx 这是正确的吗? – 2013-08-21 03:09:43

1

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

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

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