Search my blog

Some of my readers



The following code will allow you to talk to a printer (running on a specific IP Address) to query its current status.

OLEPRNLib is a COM object that appears to be installed on XP and greater machines.

On my machine I made a reference on the COM tab of the Add Reference dialog to “oleprn 1.0 Type Library“ which lived in “c:\Windows\System32\oleprn.dll

using System;
using OLEPRNLib;

namespace PrinterStatus
{
 /// 
 /// Summary description for Class1.
 /// 
 class Class1
 {
  /// 
  /// The main entry point for the application.
  /// 
  [STAThread]
  static void Main(string[] args)
  {
   string[] ErrorMessageText = new string[8];

   ErrorMessageText[0] = "service requested";
   ErrorMessageText[1] = "offline";
   ErrorMessageText[2] = "paper jammed";
   ErrorMessageText[3] = "door open";
   ErrorMessageText[4] = "no toner";
   ErrorMessageText[5] = "toner low";
   ErrorMessageText[6] = "out of paper";
   ErrorMessageText[7] = "low paper";

   int DeviceID = 1;
   int Retries = 1;
   int TimeoutInMS = 2000;
   string CommunityString = "public";
   string IPAddressOfPrinter = "10.3.0.93";

   // Create instance of COM object
   OLEPRNLib.SNMP snmp = new OLEPRNLib.SNMP();

   // Open the SNMP connect to the printer
   snmp.Open(IPAddressOfPrinter, CommunityString, Retries, TimeoutInMS);

   // The actual Warning/Error bits
   uint WarningErrorBits = snmp.GetAsByte(String.Format("25.3.5.1.2.{0}", DeviceID));

   // The actual Status
   uint StatusResult = snmp.GetAsByte(String.Format("25.3.2.1.5.{0}", DeviceID));

   // uint Result2 = snmp.GetAsByte(String.Format("25.3.5.1.1.{0}", DeviceID));

   string Result1Str = "";
   switch (StatusResult)
   {
    case 2 : Result1Str = "OK";
      break;
    case 3 : Result1Str = "Warning: ";
     break;
    case 4 : Result1Str = "Being Tested: ";
     break;
    case 5 : Result1Str = "Unavailable for any use: ";
     break;
    default : Result1Str = "Unknown Status Code : "+StatusResult;
     break;
   }

   string Str = "";
   if ((StatusResult == 3 || StatusResult == 5))
   {
    int Mask = 1;
    int NumMsg = 0;
    for (int i=0; i< 8; i++)
    {
     if ((WarningErrorBits & Mask) == Mask)
     {
      if (Str.Length > 0)
       Str += ", ";
      Str += ErrorMessageText[i];
      NumMsg = NumMsg + 1;
     }
     Mask = Mask * 2;
    }
   }
   Console.WriteLine(Result1Str + Str);
  }
 }
}
posted on Monday, August 08, 2005 8:13 PM | Filed Under [ c# ]