有没有办法在不使用wmi的情况下检索打印机的属性?

时间:2015-10-08 10:46:31

标签: c# .net printing wmi

我需要检索打印机属性,以便在执行打印过程之前检查打印机是否准备就绪,使用WMI但是我得到了错误的值。

这是我的代码:

ManagementObjectSearcher objectSearcher = new ManagementObjectSearcher("SELECT * from Win32_Printer");
ManagementObjectCollection objectCollection = objectSearcher.Get();

foreach (ManagementObject printer in objectCollection)
{
    foreach (PropertyData property in printer.Properties)
    {
       Console.WriteLine(property.Name + " : " + property.Value);
    }
}

我得到"PrinterStatus = 3""PrinterState = 0"

根据Win32_Printer page on MSDN

  

如果要检索PrinterStatus = 3或PrinterState = 0,则打印机驱动程序可能无法将准确信息提供给WMI。 WMI从spoolsv.exe进程检索打印机信息。打印机驱动程序可能不会向假脱机程序报告其状态。在这种情况下,Win32_Printer将打印机报告为空闲。

我一直在寻找解决这个问题很多天但看起来在这种情况下没有解决方案。

所以我正在寻找另一种方法来检索属性。我听说过SNMP,但并没有找到我想要的东西。

感谢。

更新:所以我回答了我的问题,但我仍然愿意接受更好的解决方案。

1 个答案:

答案 0 :(得分:0)

我认为我使用System.Printing找到了相当于我想要的内容。

PrintServer printServer = new PrintServer();
PrintQueue printQueue = printServer.GetPrintQueue("HP USB");

foreach (PropertyInfo property in printQueue.GetType().GetProperties())
{
    Console.WriteLine(property.Name + " : " + property.GetValue(printQueue));
}

这样我可以检查打印机正在做什么,以及是否发生任何错误。