【问题标题】:Using System.Drawing.Printing to get Queue Status使用 System.Drawing.Printing 获取队列状态
【发布时间】:2015-06-16 09:05:07
【问题描述】:

我一直在尝试使用System.Drawing.Printing; 来获取网络打印机的队列状态。

我可以检索打印机的属性,但我似乎无法真正获得队列状态。

这是我迄今为止尝试过的:

PrinterSettings ps = new PrinterSettings();
ps.PrinterName = "ES5461 MFP(PCL)"; // Load the appropriate printer's setting

从那里我可以看到打印机是有效的,因为 ps.IsValidtrue,但我不能再进一步了。

我也尝试过使用System.Management 来检索状态,但我只知道如何转储信息并且也没有队列信息。

string printerName = "ES5461";
string query = string.Format("SELECT * from Win32_Printer WHERE Name LIKE '%{0}%'", printerName);

ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementObjectCollection coll = searcher.Get();

foreach (ManagementObject printer in coll)
{
    foreach (PropertyData property in printer.Properties)
    {
        Console.WriteLine(string.Format("{0}: {1}", property.Name, property.Value));
    }
}

您知道使用任何 .dll 检索队列状态(文档数量)的任何方法吗?

【问题讨论】:

  • 从 .NET 3.0 开始,您可以使用 PrintQueue 类。看看:msdn.microsoft.com/en-us/library/…msdn.microsoft.com/en-us/library/…
  • 我已经查过了,但微软不建议在任何 ASP.Net 服务中使用它:“System.Printing 命名空间中的类不支持在 Windows 服务或 ASP 中使用。 NET 应用程序或服务。尝试从这些应用程序类型之一中使用这些类可能会产生意外问题,例如服务性能下降和运行时异常。还是谢谢你。
  • 根据微软的说法,System.Drawing.Printing 命名空间也将用于winforms。
  • @MiquelColl - 为什么你会关注关于System.Printing 的警告却忽略System.Drawing.Printing 的类似警告?
  • 糟糕。我没看到那个。我的错。对不起;无论哪种方式,我都在尝试再次使用 Nissim 所说的话,看来我正在做些什么。谢谢!

标签: c# printing system.drawing system.management


【解决方案1】:

感谢 Nissim,我可以解决它:

var printServer = new PrintServer();
var myPrintQueues = printServer.GetPrintQueues(new[] { EnumeratedPrintQueueTypes.Local, EnumeratedPrintQueueTypes.Connections });

foreach (PrintQueue pq in myPrintQueues)
{
    pq.Refresh();
    if (!pq.Name.ToLower().Contains("es5461")) continue;  
    PrintJobInfoCollection jobs = pq.GetPrintJobInfoCollection();
    foreach (PrintSystemJobInfo job in jobs)
    {
        var aux = job;
    }// end for each print job    
}// end for each print queue

正如 Nissim 建议的那样,使用 PrintServer (System.Printing) 和 PrintQueue 可以看到,我实际上可以访问队列信息。

【讨论】:

  • 我正在阅读此内容,因为我正在开发一个进行网络打印的 Web 服务,PrintServer 不在 System.Drawing.Printing 它在 System.Printing
  • 感谢@RyanWilson 的提醒。事实上,正确的参考文献就在那里。
  • 感谢您更新。我只是不想看到显示错误信息的好答案。不过好帖子。来自我的 +1。
猜你喜欢
  • 1970-01-01
  • 2013-09-14
  • 2019-07-07
  • 1970-01-01
  • 2013-04-27
  • 1970-01-01
  • 1970-01-01
  • 2019-08-27
  • 1970-01-01
相关资源
最近更新 更多