当通过Win32_Printer查询时,打印机显示为空闲,depsite处于脱机状态



我希望通过使用ManagementObjectSearcher查询Win32_printer来获取特定打印机的状态。我的代码如下:

using (var searcher = new ManagementObjectSearcher($"SELECT * FROM Win32_Printer WHERE Name LIKE '{printerName}'"))
{
using (ManagementObjectCollection coll = searcher.Get())
{
foreach (ManagementObject printer in coll)
{
var status = printer.Properties["PrinterStatus"].Value.ToString();
var extendedPrinterStatus = printer.Properties["ExtendedPrinterStatus"].Value.ToString();
var printerState = printer.Properties["PrinterState"].Value.ToString();
Console.WriteLine(status); // 3 (Idle)
Console.WriteLine(printerState); // 0 (Idle)
Console.WriteLine(extendedPrinterStatus); // 2 (Unknown)
return status == "3";
}
}
}

无论打印机是否已连接,PrinterStatusExtendedPrinterStatusPrinterState的值都保持不变。当打印机断开连接时,它在Windows中的打印机和扫描仪下显示为脱机。

知道我做错了什么吗?我想不通!

感谢

无论打印机是否连接,PrinterStatus、ExtendedPrinterStatus和PrinterState的值都保持不变

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

参考:Win32_Printer类别备注

你知道Windows打印机和;扫描仪窗口能够准确地说明打印机是否已连接

如果您想确定物理打印机的状态,

有一个基本前提必须为真才能确定物理打印机的状态:后台处理程序必须尝试发送将作业打印到物理打印机。这是唯一一次打印机由端口监视器报告。此外可以在的状态成员中报告有意义的信息该特定打印作业的JOB_INFO结构,因为某些端口监视器将直接设置这些值。

JOB_INFO结构包含一个Status成员和一个pStatus成员。两个成员都包含由端口监视器。

样本代码

顺便说一句,在Win32_Printer类别中,PrinterState是不推荐的。

最新更新