Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有一种方法可以在不使用wmi的情况下检索打印机的属性?_C#_.net_Printing_Wmi - Fatal编程技术网

C# 有没有一种方法可以在不使用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

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

根据:

如果正在检索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一下,看看它是否在网络上作为开始?是的,它在网络上,这不是问题,打印机正在工作。我需要得到这些信息,以防发生错误。我已经试过使用这个系统了。打印速度很快,但对我没有多大帮助,我会仔细看看,谢谢。这可能会让你们感兴趣