C#獲取打印機狀態


public static string GetPrinterStatus(string PrinterName)  
  {  
  int intValue = GetPrinterStatusInt(PrinterName);  
  string strRet = string.Empty;  
  switch (intValue)  
  {  
  case 0:  
  strRet = "准備就緒(Ready)";  
  break;  
  case 0x00000200:  
  strRet = "忙(Busy)";  
  break;  
  case 0x00400000:  
  strRet = "被打開(Printer Door Open)";  
  break;  
  case 0x00000002:  
  strRet = "錯誤(Printer Error)";  
  break;  
  case 0x0008000:  
  strRet = "初始化(Initializing)";  
  break;  
  case 0x00000100:  
  strRet = "正在輸入,輸出(I/O Active)";  
  break;  
  case 0x00000020:  
  strRet = "手工送紙(Manual Feed)";  
  break;  
  case 0x00040000:  
  strRet = "無墨粉(No Toner)";  
  break;  
  case 0x00001000:  
  strRet = "不可用(Not Available)";  
  break;  
  case 0x00000080:  
  strRet = "脫機(Off Line)";  
  break;  
  case 0x00200000:  
  strRet = "內存溢出(Out of Memory)";  
  break;  
  case 0x00000800:  
  strRet = "輸出口已滿(Output Bin Full)";  
  break;  
  case 0x00080000:  
  strRet = "當前頁無法打印(Page Punt)";  
  break;  
  case 0x00000008:  
  strRet = "塞紙(Paper Jam)";  
  break;  
  case 0x00000010:  
  strRet = "打印紙用完(Paper Out)";  
  break;  
  case 0x00000040:  
  strRet = "紙張問題(Page Problem)";  
  break;  
  case 0x00000001:  
  strRet = "暫停(Paused)";  
  break;  
  case 0x00000004:  
  strRet = "正在刪除(Pending Deletion)";  
  break;  
  case 0x00000400:  
  strRet = "正在打印(Printing)";  
  break;  
  case 0x00004000:  
  strRet = "正在處理(Processing)";  
  break;  
  case 0x00020000:  
  strRet = "墨粉不足(Toner Low)";  
  break;  
  case 0x00100000:  
  strRet = "需要用戶干預(User Intervention)";  
  break;  
  case 0x20000000:  
  strRet = "等待(Waiting)";  
  break;  
  case 0x00010000:  
  strRet = "熱機中(Warming Up)";  
  break;  
  default:  
  strRet = "未知狀態(Unknown Status)";  
  break;  
  }  
  return strRet;
   }

   internal static int GetPrinterStatusInt(string PrinterName)  
  {  
  int intRet = 0;  
  IntPtr hPrinter;  
  structPrinterDefaults defaults = new structPrinterDefaults();  
 
   if (OpenPrinter(PrinterName, out hPrinter, ref defaults))  
  {  
  int cbNeeded = 0;  
  bool bolRet = GetPrinter(hPrinter, 2, IntPtr.Zero, 0, out cbNeeded);  
  if (cbNeeded > 0)  
  {  
  IntPtr pAddr = Marshal.AllocHGlobal((int)cbNeeded);  
  bolRet = GetPrinter(hPrinter, 2, pAddr, cbNeeded, out cbNeeded);  
  if (bolRet)  
  {  
  PRINTER_INFO_2 Info2 = new PRINTER_INFO_2();  
    
  Info2 = (PRINTER_INFO_2)Marshal.PtrToStructure(pAddr, typeof(PRINTER_INFO_2));  
    
  intRet = System.Convert.ToInt32(Info2.Status);  
  }  
  Marshal.FreeHGlobal(pAddr);  
  }  
  ClosePrinter(hPrinter);  
  }  
 
   return intRet;  
  }  

  [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]  
  internal struct structPrinterDefaults  
  {  
  [MarshalAs(UnmanagedType.LPTStr)]  
  public String pDatatype;  
  public IntPtr pDevMode;  
  [MarshalAs(UnmanagedType.I4)]  
  public int DesiredAccess;  
  };  

狀態枚舉
[FlagsAttribute]  
  internal enum PrinterStatus  
  {  
  PRINTER_STATUS_BUSY = 0x00000200,  
  PRINTER_STATUS_DOOR_OPEN = 0x00400000,  
  PRINTER_STATUS_ERROR = 0x00000002,  
  PRINTER_STATUS_INITIALIZING = 0x00008000,  
  PRINTER_STATUS_IO_ACTIVE = 0x00000100,  
  PRINTER_STATUS_MANUAL_FEED = 0x00000020,  
  PRINTER_STATUS_NO_TONER = 0x00040000,  
  PRINTER_STATUS_NOT_AVAILABLE = 0x00001000,  
  PRINTER_STATUS_OFFLINE = 0x00000080,  
  PRINTER_STATUS_OUT_OF_MEMORY = 0x00200000,  
  PRINTER_STATUS_OUTPUT_BIN_FULL = 0x00000800,  
  PRINTER_STATUS_PAGE_PUNT = 0x00080000,  
  PRINTER_STATUS_PAPER_JAM = 0x00000008,  
  PRINTER_STATUS_PAPER_OUT = 0x00000010,  
  PRINTER_STATUS_PAPER_PROBLEM = 0x00000040,  
  PRINTER_STATUS_PAUSED = 0x00000001,  
  PRINTER_STATUS_PENDING_DELETION = 0x00000004,  
  PRINTER_STATUS_PRINTING = 0x00000400,  
  PRINTER_STATUS_PROCESSING = 0x00004000,  
  PRINTER_STATUS_TONER_LOW = 0x00020000,  
  PRINTER_STATUS_USER_INTERVENTION = 0x00100000,  
  PRINTER_STATUS_WAITING = 0x20000000,  
  PRINTER_STATUS_WARMING_UP = 0x00010000  
  }  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM