public class Printer
{/// <summary> /// 构造函数 /// </summary> /// <param name="name">打印机名称</param> public Printer(string name){this.printer_name = name;}// 设备名:EPSON R330 Series private string _printer_name;/// <summary> /// 打印机名称 /// </summary> public string printer_name{get{return _printer_name;}set{_printer_name = value;}}/// <summary> /// 获取打印机状态 /// </summary> /// <returns></returns> public int getStatus(){string path = @"win32_printer.DeviceId='" + this.printer_name + "'";ManagementObject printer = new ManagementObject(path);printer.Get();return Convert.ToInt32(printer.Properties["PrinterStatus"].Value);}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;}[DllImport("winspool.Drv", EntryPoint = "OpenPrinter", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = false, CallingConvention = CallingConvention.StdCall),SuppressUnmanagedCodeSecurityAttribute()]internal static extern bool OpenPrinter([MarshalAs(UnmanagedType.LPTStr)] string printerName, out IntPtr phPrinter, ref structPrinterDefaults pd);[DllImport("winspool.Drv", EntryPoint = "GetPrinterA", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]internal static extern bool GetPrinter(IntPtr hPrinter, int dwLevel, IntPtr pPrinter, int dwBuf, out int dwNeeded);[DllImport("winspool.Drv", EntryPoint = "ClosePrinter", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = false, CallingConvention = CallingConvention.StdCall), SuppressUnmanagedCodeSecurityAttribute()]internal static extern bool ClosePrinter(IntPtr phPrinter);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}[StructLayout(LayoutKind.Sequential)]internal struct PRINTER_INFO_2{public string pServerName;public string pPrinterName;public string pShareName;public string pPortName;public string pDriverName;public string pComment;public string pLocation;public IntPtr pDevMode;public string pSepFile;public string pPrintProcessor;public string pDatatype;public string pParameters;public IntPtr pSecurityDescriptor;public uint Attributes;public uint Priority;public uint DefaultPriority;public uint StartTime;public uint UntilTime;public uint Status;public uint cJobs;public uint AveragePPM;}}
string statu=   Printer.GetPrinterStatus("打印机名称");

打印系统开发(39)——检查打印机状态相关推荐

  1. 打印系统开发(55)——打印机监视器是什么,为什么安装不上?

    你指的是Print Spooler服务经常无故被停止吧?Print Spooler服务总是自动关闭 尝试访问 Windows 2000 打印服务器上的打印机时,Print Spooler 服务可能会频 ...

  2. API(15)——打印系统开发(52)——WinForm开发(62)——C#通过调用WinApi打印PDF文档类,服务器PDF打印、IIS PDF打印

    其他网站下载来的类,可以用于Winform.Asp.Net,用于服务器端PDF或其他文件打印. 直接上代码: using System; using System.Collections.Generi ...

  3. API(1)——打印系统开发(32)——Windows API函数大全(精心总结)

    目录 1. API之网络函数 2. API之消息函数 3. API之文件处理函数 4. API之打印函数 5. API之文本和字体函数 6. API之菜单函数 7. API之位图.图标和光栅运算函数 ...

  4. 打印系统开发(63)——C# 实现虚拟打印机 HP Color LaserJet 4500 (2) True Type Font字体显示

    本来打算酸所有的PCL HPGL/2的都贴出来.后来发现这里重要的字体显示 TTF的数据显示就2000多行 10来个类了.所以把这个独立出来.另外我增加了一些字符对应和轮廓显示的方法.有兴趣的朋友可以 ...

  5. 打印系统开发(33)——打印机的使用(理光Ricoh Pro 907EX PCL 6)

    打印机的使用(理光Ricoh Pro 907EX PCL 6) 当发生断电时,打印机的端口有可能会改变,这时在电脑上就会显示"脱机"状态,没法使用打印机.处理方法步骤如下: 1.这 ...

  6. 打印系统开发(30)——调用API弹出打印机属性对话框

    调用api弹出打印机属性对话框 一.printerProperties 二.documentProperties 三.openPrinter 四.closePrinter 五.samplecodes: ...

  7. 打印系统开发(7)——如何使用打印机

    当今社会,无论在学校或者工作,打印机几乎都成了必不可少的物品.想复印什么资料,详细的看看什么信息,可以很轻松的完成了,既不用守在电脑旁观看,还可以不用眼过度,最好的是方便,想什么时候,什么地点看都是可 ...

  8. 打印系统开发(15)——WinForm开发(43)——winform 使用打印机

    winform 使用打印机 工具箱里的pageSetupDialog ,printDialog,printDocument,printPreviewDialog 拖到屏幕上 用printDocumen ...

  9. 打印系统开发(38)——API(3)——windows设置默认打印机

    实现这个功能需要使用windows api [DllImport("winspool.drv")] public static extern bool SetDefaultPrin ...

最新文章

  1. Android Gradle基础实践
  2. c++预处理命令#pragma 用法
  3. 如何去掉 从网页上copy到word文档中之后 的背景颜色 (备忘)
  4. Eigen入门之密集矩阵 7 - Map class:连接Eigen与C++的数据
  5. ASP.NET Core 缓存技术 及 Nginx 缓存配置
  6. BZOJ 1606: [Usaco2008 Dec]Hay For Sale 购买干草
  7. css选择指定class的元素
  8. 第二季-专题0-课程规划
  9. python 爬手机号_【Python爬虫】手机号网段爬虫
  10. 使用webots的MPC的移动机器人轨迹跟踪控制
  11. python从云端服务器读数据_云服务器简单实现Python自动运维
  12. 小米10获取root权限_小米手机:刷机卡刷、线刷、root权限获取
  13. 关于单级PID及串级PID
  14. substr函数|字符串截取
  15. c语言实现图片过渡效果飞入,用css3实现转换过渡和动画效果
  16. 什么是tuscany
  17. [随笔]openpyxl的安装
  18. linux常用的引导管理器,多重引导管理器Grub使用详解
  19. kettle安装、使用、部署总结
  20. 点云处理——PCA主成分分析

热门文章

  1. wordpress获取用户数据函数:get_userdata
  2. ICMP flood(ICMP洪水攻击)
  3. 第八章| 1. MySQL数据库|库操作|表操作
  4. 坐标下降法(Coordinate descent)
  5. 昆明公交车和站台建在路中央
  6. Cesium解决方案 绘制网格 绘制经纬度栅格
  7. vue自定义组件三步走
  8. 错误程序致广大证券被罚5.2亿
  9. Java实现高数的收敛级数和不定积分求圆周率
  10. win7 生成jar包