C# 有没有一种方法可以在不使用wmi的情况下检索打印机的属性?
在执行打印过程之前,我需要检索打印机属性以检查打印机是否准备就绪,使用WMI,但我得到了错误的值 这是我的密码:C# 有没有一种方法可以在不使用wmi的情况下检索打印机的属性?,c#,.net,printing,wmi,C#,.net,Printing,Wmi,在执行打印过程之前,我需要检索打印机属性以检查打印机是否准备就绪,使用WMI,但我得到了错误的值 这是我的密码: ManagementObjectSearcher objectSearcher = new ManagementObjectSearcher("SELECT * from Win32_Printer"); ManagementObjectCollection objectCollection = objectSearcher.Get(); foreach (Ma
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”
根据:
如果正在检索PrinterStatus=3或PrinterState=0,则打印机驱动程序可能没有将准确信息输入WMI。WMI从spoolsv.exe进程检索打印机信息。打印机驱动程序可能不向后台打印程序报告其状态。在这种情况下,Win32_打印机将打印机报告为空闲
我已经寻找解决这个问题很多天了,但在这种情况下似乎没有解决办法
因此,我正在寻找另一种检索属性的方法。我听说过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));
}
通过这种方式,我可以检查打印机正在执行的操作以及是否出现任何错误。我想我找到了与我所寻找的相同的操作,使用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));
}
这样,我可以检查打印机正在执行的操作以及是否出现任何错误。您尝试过吗?可能先ping一下,看看它是否在网络上?是的,它在网络上,这不是问题,打印机正在工作。我需要得到这些信息,以防发生错误。我已经试过使用这个系统。打印速度很快,但对我没有多大帮助,我会仔细看看,谢谢。这可能对你来说很有趣。你试过了吗?也许ping一下,看看它是否在网络上作为开始?是的,它在网络上,这不是问题,打印机正在工作。我需要得到这些信息,以防发生错误。我已经试过使用这个系统了。打印速度很快,但对我没有多大帮助,我会仔细看看,谢谢。这可能会让你们感兴趣