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 
 

C# 获取打印机状态的更多相关文章

  1. LODOP获取打印机状态码和状态码含义测试

    由于打印机千差万别,打印机执行的标准也不一样,LODOP获取的打印状态码也可能不同,安装了个打印机驱动实际测试一下,测试的打印机驱动是Brother Color Type3 Class Driver. ...

  2. .Net中获取打印机的相关信息

    原文:.Net中获取打印机的相关信息 新项目中牵涉到对打印机的一些操作,最重要的莫过于获取打印机的状态,IP等信息,代码量不大,但是也是自己花了一点时间总结出来的,希望能帮助需要的朋友. Printe ...

  3. LODOP获取打印状态码和时间列表

    之前有博文介绍获取打印状态码和打印状态码的含义,相关博文:LODOP获取打印机状态码和状态码含义测试.此外 ,也有获取状态码及其变化的方法,可以获取打印状态码的列表,列表包含每个状态和每个状态的时间. ...

  4. 【VC++技术杂谈003】打印技术之打印机状态监控

    在上一篇博文中我主要介绍了如何获取以及设置系统的默认打印机,本文将介绍如何对打印机状态进行实时监控,记录下所打印的文档.打印的份数以及打印时间等打印信息. 1.打印机虚脱机技术 在正式介绍如何对打印机 ...

  5. iOS 获取网络状态

    在iOS开发者,获取网络状态比较常用 -(NSString *)getNetWorkStates{ UIApplication *app = [UIApplication sharedApplicat ...

  6. C# 获取时间差状态

    /// <summary> /// 根据时间获取时间状态 /// </summary> /// <param name="dt"></pa ...

  7. Best Practices for Performance_4.Optimizing Battery Life 获取充电状态、电池信息,"sticky"类型的广播

    http://developer.android.com/training/monitoring-device-state/index.htmlhttp://developer.android.com ...

  8. Android 通过广播获取网络状态

    Android系统网络连接状态的改变会发一个广播,注册一个广播接收者,实时动态的检测网络状态,及时提醒用户,优化用户体验.          本文仅提供WIFI 状态的检测作为参考,其他网络连接方式请 ...

  9. C# 获取打印机列表以及串口

    C# 获取打印机列表以及默认打印机.串口列表. /// <summary> /// 获取本地已安装的打印机 /// </summary> /// <returns> ...

随机推荐

  1. SharedPreferences实现记住密码功能

    SharedPerferences 简单介绍 用于保存简单的键值对数据: 它将数据放在 /data/data/<package name>/shared_prefs目录下,用xml文件保存 ...

  2. SQLServer BCP 命令的使用

    现在有一个包含数据的文件,每个字段用“|”分隔,现在要把这些数据导入到数据库的表中. 数据文件如下: R001|20150710 可以使用如下命令: bcp testDB.dbo.testTable ...

  3. @修饰符--python中的装饰器

    装饰器模式可以在不影响其他对象的情况下,以动态.透明的方式给单个对象添加职责,也能够处理那些可以撤销的职责.经常用于日志记录.性能测试等场合. 想象一下这个很常见的场景,你写了一个方法只提供给以登陆的 ...

  4. python 数据结构-列表

    列表常用方法汇总: #定义列表li li=[12.23,456,88,9] a=[1,2,3] #添加元素到列表结尾 li.append(360) #追加列表元素extend(L) li.extend ...

  5. 802.11 wireless 七

    802.11 wireless 7Wireless Fundamentals : End-to-End Discovering the NetworkGetting Connect Clients i ...

  6. 【python】编码规范(转载)

    转自:http://www.cnblogs.com/itech/archive/2012/01/06/2314454.html 1 编码 >>所有的 Python 脚本文件都应在文件头标上 ...

  7. java加载机制整理

    本文是根据李刚的<疯狂讲义>作的笔记,程序有的地方做了修改,特别是路径,一直在混淆,浪费了好多时间!!希望懂的同学能够指导本人,感激尽............ 1.jvm 和 类的关系 当 ...

  8. 全面认识JVM技术

    本文向大家描述一下JVM的概念,JVM(Java虚拟机)是可运行Java代码的假想计算机.只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该系统上运行. J ...

  9. HDU-2604_Queuing

    题目:Problem Description Queues and Priority Queues are data structures which are known to most comput ...

  10. HDOJ 1398 Square Coins 母函数

    Square Coins Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...