项目需要,使用了研科的T91型号热敏打印机。打印机有缺纸的指示灯,缺纸时windows的打印机状态也能表示是缺纸。

下面的代码能够取得该打印机的状态。

公司另外一台老的夏普打印机,缺纸时windows的打印机状态没有任何显示,也无法通过下面的代码取得打印机状态。

注:代码是在网上查找组合起来的。

前提:1. 在form上追加一个printdocument控件和一个按钮控件。

2. 将对象打印机设置为默认打印机。

1) 新建一个PrinterHelper类。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;namespace WindowsFormsApplication1
{class PrinterHelper{[DllImport("winspool.drv", CharSet = CharSet.Auto, SetLastError = true)]private static extern bool OpenPrinter(string pPrinterName, out IntPtr hPrinter, IntPtr pDefault);[DllImport("winspool.drv", SetLastError = true)]private static extern bool ClosePrinter(IntPtr hPrinter);[DllImport("winspool.drv", SetLastError = true)]private static extern bool GetPrinter(IntPtr hPrinter,int dwLevel, IntPtr pPrinter, int cbBuf, out int pcbNeeded);[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]public 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;}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;if (OpenPrinter(PrinterName, out hPrinter, IntPtr.Zero)){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;}}
}

2) 在form的按钮click事件内弹出对话框表示打印机状态

MessageBox.Show(PrinterHelper.GetPrinterStatus(printDocument1.PrinterSettings.PrinterName));

如果这篇文章对你有帮助,赞一个~

C#查看打印机状态(缺纸)相关推荐

  1. 打印机显示缺纸服务器脱机,打印机:提示“缺纸”后无法继续打印的解决办法...

    [故障现象] 在打印过程中,打印机缺纸.当纸张放回纸盘时,打印机仍处于红灯闪烁状态,未完成的文件无法继续打印. [失败原因] 进纸盘中没有足够的纸张,因此无法打印未完成的文档. [解决方案] 方法1: ...

  2. 打印机显示缺纸服务器脱机,打印机有纸显示缺纸是怎么回事 故障解答【详解】...

    打印机有纸显示缺纸是怎么回事? 打印机进纸槽中装有不少打印纸张,可是在执行打印操作时,打印机控制面板中的缺纸信号灯,却闪烁了起来,这是什么故障? 答: 出现这种现象,很有可能是打印机的纸张传动结构,出 ...

  3. fastreport 报表hp打印机提示缺纸,实际有纸,需要按打印机确认键才能打印

    在排除打印机纸张来源为设置为'自动选择'后,打开报表的面页设置,找到'默认纸盒'选项,将'手动进纸'改为'自动选择'

  4. 打印机状态返回说明(针对串口打印机)

    2:有关打印机状态返回说明(针对串口打印机): 打印机有缺纸状态返回,纸将尽状态返回.空闲状态返回,打印机钱箱开启状态返回, 打印机切刀状态返回. 查询指令包括:实时查询,非实时查询, 实时查询指令: ...

  5. html怎么消除打印的进纸,打印机缺纸状态怎么消除?

    打印机总是提示缺纸 故障描述:用户最近在使用打印机的时候发现,明明打印机进纸槽中装有不少打印纸张.可是在执行打印操作时,印机控制面板中的缺纸信号灯却总是闪烁. 故障诊断:产生这种故障的原因一般是打印机 ...

  6. java 获取打印机缺纸_Java怎么实现打印机监控

    展开全部 实现目标: 1.可以测试打印32313133353236313431303231363533e58685e5aeb931333363393035机是否连接 2.监控打印机的状态:打印机缺纸. ...

  7. 【T6】打印总账的时候提示:打印机缺纸(错误号:1001)

    [问题现象] 使用畅捷通T6软件的时候, 账簿打印,打印明细账正常:打印总账提示打印机缺纸(错误号:1001). [解决方法] 经过测试,打印报错后, 点击预览,预览中是空白的没有数据. 此时,在查询 ...

  8. T6账簿打印显示打印机缺纸

    问题现象:在打印总账账簿的时候点打印显示打印机缺纸,实际有放纸进去,预览进去空白或者横线 解决方法:打开总账账簿点击表头还原然后再去打印即可,其他账簿如果也出现这个问题到相应的账表中还原一下格式即可.

  9. 打印机不进纸是什么原因

    打印机在我们生活中应用广泛,很多学校周围的打印店. 办公室 等地方都有打印机,特别是工作上常要用到打印机.不过,打印机在使用过程中常会出现一些问题,如打印机不进纸就是一个常见的故障.那么,打印机不进纸 ...

  10. l1300打印机纸进不去_爱普生打印机不进纸该怎么解决?

    使用爱普生的时候,发现打印机不进纸,比如EPSON LQ-80KF/610/615,如果该型号的打印机出现放置纸张不进纸的情况可以通过以下方法来解决问题,下面我们就来看看详细的教程. 1.出现问题情况 ...

最新文章

  1. mysql安装教程刘猿猿_mysql安装
  2. correlated subquery and non-correlated subquery
  3. TypeScript,初次见面,请多指教 ?
  4. 嵌入式系统开发学习步骤(Linux高级编程学习顺序)
  5. 赛门铁克分家前利润暴跌
  6. 社群经济:如何利用社群做营销?
  7. SQL Sever — 导入数据与导出数据到表的方法
  8. flask-script插件
  9. 软件测试-测试用例的经典例子
  10. 智能制造解决方案举例 智能制造解决方案落地实例
  11. 读书笔记——阿里数据中台(第一篇:数据中台顶层设计)
  12. 打开网站服务器显示403,打开网站显示403是什么意思
  13. 发布一个水管接通游戏的源代码
  14. 某马python day03
  15. ClickHouse入门基础教程
  16. sgu-207 Robbers
  17. 显卡显存测试u盘 mats 百度网盘_网盘数据不安全?还不如固态U盘来得踏实,而且传输速度还很快...
  18. 未来几年GPT/大模型如何影响软件研发?
  19. 微聊 仿微信聊天android app 开源
  20. MATLAB 神经网络训练参数解释

热门文章

  1. 图文详解win7实现局域网共享文件
  2. JS05-循环的嵌套demo
  3. matlab中二维图plot,semilogx,semilogy,semilogy之间的作图区别
  4. vss服务器状态失败_vss问题解决办法
  5. 小米路由器显示网络未连接到服务器,小米路由器异常排查的常见问题与使用技巧...
  6. 自媒体文章标题的大坑,难怪你写的文章没有推荐
  7. 如何下载专利(国内)
  8. 如何在Word中绘制流程图
  9. CC2430 定时器溢出中断 详解
  10. spark处理大数据实例