有没有一种方法可以检索打印机的属性而不使用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,但没有真正找到我想要的。
谢谢。
更新:所以我回答了我的问题,但我仍然愿意接受更好的解决方案。
我想我找到了我想要的,使用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));
}
这样我可以检查打印机正在做什么,如果有任何错误发生