【问题标题】:Get file name when printing打印时获取文件名
【发布时间】:2011-02-01 11:40:01
【问题描述】:

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

【问题讨论】:

    标签: windows printing


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      打印机驱动程序没有任何用于查找文件名的外部 API。我假设您正在考虑创建某种系统托盘代理类型的应用程序,该应用程序将监视打印队列以查找正在发送的作业。如果是这样 -

      1. 请参阅 http://support.microsoft.com/kb/196805 了解可让您监控打印队列以了解打印作业状态的 Microsoft 工具
      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 :)

      【讨论】:

      【解决方案3】:

      不,没有,至少不可靠。请记住,可能根本没有文件名。例如,我可以打开记事本之类的应用程序,输入一些内容,然后打印。我要打印什么文件?没有任何。

      在上述情况下,大多数应用程序都会提供某种默认文件名,例如“无标题”,有时您可以通过解析打印作业的名称来找到该名称。例如,如果您调用GetJob,则JOB_INFO_1 结构的pDocument 成员将包含指向打印作业名称的指针,并且该名称通常包含文件名。

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

      【讨论】:

        猜你喜欢
        • 2013-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-31
        • 1970-01-01
        • 1970-01-01
        • 2012-01-17
        相关资源
        最近更新 更多