2013-04-11 153 views
0

我想获取网络打印机的状态。我试过WMI代码,因为这个link说。但即使我拆下网线,它总是会去到其他部分。打印机状态返回错误值

这里是我试过的代码:

ManagementObjectSearcher searcher = new 
      ManagementObjectSearcher("SELECT * FROM Win32_Printer"); 

string printerName = ""; 

foreach (ManagementObject printer in searcher.Get()) 
{ 
    printerName = printer["Name"].ToString().ToLower(); 

    if (printer["WorkOffline"].ToString().ToLower().Equals("true") && printer["Default"].ToString().ToLower().Equals("true")) 

    { 
     string s = "Printer offline" + printerName; 
     listBox1.Items.Add(s); 
    } 
    else 
    { 
     // printer is not offline 
     // Console.WriteLine("Your Plug-N-Play printer is connected."); 

     string s = "Printer found and is online " + printerName; 
     listBox1.Items.Add(s); 
    } 
+2

你'ToLower'然后'Offline'?你明白为什么它总是会碰到其他部分 – V4Vendetta 2013-04-11 06:16:10

+0

+1这是一个很好的观察。但我印的是价值,它总是假的。 – Zigma 2013-04-11 06:39:41

+0

@ V4Vendetta嗨问题已编辑。现在检查条件 – Zigma 2013-04-11 06:49:30

回答

1

退房的条件

printer["PrinterState"].ToString().ToLower().Equals("Offline") 
// this would mean offline == Offline which would be false 

你需要在较低的情况下比较,你有一个错字脱机有Caps Lock键O

1

比较可能是不正确的......因为声明

ConsoleWriteLine(printer["PrinterState"].ToString());

返回“0”时,在打印机处于联机状态,和“128”时,该故障是由于任何原因(断电,卸载,电缆连接如,网络故障等)

右比较必须是:

printer["PrinterState"].ToString().ToLower().Equals("128")用于离线

printer["PrinterState"].ToString().ToLower().Equals("0")上线