2013-04-11 4 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

+0

+1 Это хорошее наблюдение. Но я напечатал значение. Он всегда ложный. – Zigma

+0

@ V4Vendetta привет, вопрос редактируется. проверьте состояние сейчас – Zigma

ответ

1

Заканчивать условия

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

вам нужно будет сравнение в нижнем регистре, то есть опечатка Offline имеет Caps LockO

1

сравнение может быть неправильным ... из-за заявления

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

возвращает «0», когда принтер находится на линии, и «128», когда эта неисправность из-за какой-либо причине (от деинсталлировать питания,, кабель Conection, сетевые проблемы, и т.д.)

правильные сравнения должны быть:

printer["PrinterState"].ToString().ToLower().Equals("128") для отключения линии

printer["PrinterState"].ToString().ToLower().Equals("0") для на линии

Смежные вопросы