【发布时间】:2015-08-13 08:39:06
【问题描述】:
我已经做了将近 2 天了,但我什么也没做!!
我被分配编写一个程序来计算在 Windows 操作系统上打印的页数。
据我所知,我需要拦截打印事件并在内部对其进行计数。我应该使用FindFirstPrinterChangeNotification 和FindNextPrinterChangeNotification。
我已经分配了一个带有以下签名的回调函数PrinterNotifyWaitCallback,当打印事件发生时它会触发多次。
public void PrinterNotifyWaitCallback(Object state, bool timedOut) { ... }
问题:
我知道为什么打印事件会触发PrinterNotifyWaitCallback多次,但是我无法区分这些多个回调中的实际打印回调事件,这显然它与Object state 有关,但关于如何实现我的目标的文档为零,即计算打印页数。
问题:
- 如何区分
PrinterNotifyWaitCallback的实际打印回调来统计系统范围的总打印页数? - 还有其他更好的方法来完成这项任务吗?
【问题讨论】:
-
听起来像是一个相当可疑的任务。这不是由打印机更好地处理吗?
-
程序需要计数,与打印机无关。
-
您想对任意打印机类型执行此操作吗?打印到文件而不是打印到纸上呢?如果打印作业已排队但从未实际打印怎么办?您想知道排队的页数,还是打印的页数?
-
@DavidHeffernan 1) 是的,我希望它适用于任意打印机类型,如果我能在回调函数中了解打印机类型,那就太好了。 2) 不,我只需要打印到论文上,但如果不可能同时计算文件和论文#。 3)如果打印从未发生过也没关系。 4)我想知道打印的页面,但如果不可能,排队的页面也可以(我可以为此写一个解决方法)
标签: c# windows winapi com print-spooler-api