有没有一种方法可以检索打印机的属性而不使用wmi ?

本文关键字:属性 wmi 打印机 检索 一种 方法 有没有 | 更新日期: 2023-09-27 18:16:55

我需要检索打印机属性,以检查打印机是否准备好执行打印过程之前,使用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"

根据MSDN上的Win32_Printer页面:

如果您正在检索PrinterStatus = 3或PrinterState = 0,则打印机驱动程序可能没有向WMI提供准确的信息。WMI从spolsv .exe进程中检索打印机信息。打印机驱动程序可能没有向假脱机程序报告其状态。在这种情况下,Win32_Printer将打印机报告为Idle。

我一直在寻找解决这个问题的办法,但似乎没有解决办法。

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

谢谢。

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

有没有一种方法可以检索打印机的属性而不使用wmi ?

我想我找到了我想要的,使用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));
}

这样我可以检查打印机正在做什么,如果有任何错误发生