【问题标题】:How do I retrieve a list or number of jobs from a printer queue?如何从打印机队列中检索作业列表或数量?
【发布时间】:2011-08-01 09:29:53
【问题描述】:

我正在寻找一种从特定打印机获取作业列表或数量的方法。在最好的情况下,我希望有一个“作业对象”,它代表一个打印作业及其在打印队列中的名称。

这是必需的,因为我需要监控打印机的状态,这样我就可以用一批新文档重新填充打印队列,而不会溢出打印后台处理程序

提前致谢!

编辑:添加解决方案的代码片段

private int GetNumberOfPrintJobs()
{
    LocalPrintServer server = new LocalPrintServer();
    PrintQueueCollection queueCollection = server.GetPrintQueues();
    PrintQueue printQueue = null;

    foreach (PrintQueue pq in queueCollection)
    {
        if (pq.FullName == PrinterName)
            printQueue = pq;
    }

    int numberOfJobs = 0;
    if (printQueue != null)
        numberOfJobs = printQueue.NumberOfJobs;

    return numberOfJobs;
}

【问题讨论】:

    标签: c# .net printing queue


    【解决方案1】:

    您可以使用 System.Printing 命名空间中的 .NET 3.0 PrintQueue 类。它的 NumberOfJobs 属性告诉您有多少作业排队,GetPrintJobInfoCollection() 返回所有作业的详细信息。请注意,它没有任何事件告诉您作业集合已更改,您需要使用计时器进行轮询。一秒钟左右应该没问题。

    【讨论】:

    • 我已经看过这个了。但它需要一个 PrintServer 对象来实例化。我正在使用本地安装的打印机。这会造成问题吗?但这肯定是一个理想的解决方案。当我在线程中打印时,我已经有一个 while() 构造来轮询,我需要一个阻塞构造。这台打印机也非常慢;)
    • 使用 LocalPrintServer 类。
    • 会这么明显吗?感谢您向我展示 Google 无法提供的功能:)
    • 我在这个问题之后问了一个问题,因为我仍然坚持如何使用 LocalPrintServer 定位特定机器:stackoverflow.com/questions/5645892/…
    • 注意Local这个词。它针对的是一台非常特定的机器,即运行程序的机器。
    【解决方案2】:

    您可以使用 WMI 获取有关设备和东西的系统信息。

    see this article

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-14
      • 2019-10-20
      • 1970-01-01
      • 1970-01-01
      • 2011-10-28
      • 2014-04-12
      • 1970-01-01
      相关资源
      最近更新 更多