0

ネットワークプリンターのステータスを取得しようとしています。このリンクが示すように、WMIコードを試しました。しかし、ネットワーク ケーブルを取り外しても、常に else の部分に移動します。

これが私が試したコードです:

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);
    }
4

2 に答える 2

1

状態をチェック

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

小文字で比較する必要があります。タイプミスがあります Offline has aCaps Lock O

于 2013-04-11T06:19:06.370 に答える
1

比較は正しくない可能性があります...

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

プリンターがオンラインの場合は「0」を返し、何らかの理由 (電源オフ、アンインストール、ケーブル接続、ネットワーク障害など) によるこの障害の場合は「128」を返します。

正しい比較は次のとおりです。

printer["PrinterState"].ToString().ToLower().Equals("128")オフライン用

printer["PrinterState"].ToString().ToLower().Equals("0")オンライン用

于 2017-09-08T16:21:36.643 に答える