如何用c#实现打印机脱机检查及阻塞打印
发表于:2024-10-01 作者:千家信息网编辑
千家信息网最后更新 2024年10月01日,这篇文章主要介绍"如何用c#实现打印机脱机检查及阻塞打印",在日常操作中,相信很多人在如何用c#实现打印机脱机检查及阻塞打印问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答
千家信息网最后更新 2024年10月01日如何用c#实现打印机脱机检查及阻塞打印
这篇文章主要介绍"如何用c#实现打印机脱机检查及阻塞打印",在日常操作中,相信很多人在如何用c#实现打印机脱机检查及阻塞打印问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何用c#实现打印机脱机检查及阻塞打印"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
打印机状态获取
enum PrinterStatus { 其他 = 1, 未知 = 2, 空闲 = 3, 打印 = 4, 预热 = 5, 停止打印 = 6, 脱机 = 7, }////// 获取打印机的当前状态/// /// 打印机设备名称///打印机状态 private static PrinterStatus GetPrinterPrinterStatus(string PrinterDevice) { PrinterStatus ret = 0;string path = @"win32_printer.DeviceId='" + PrinterDevice + "'"; ManagementObject printer = new ManagementObject(path); printer.Get(); ret = (PrinterStatus)Convert.ToInt32(printer.Properties["PrinterStatus"].Value);return ret; }
打印机脱机检查
public static bool CheckPrinter(string BindPrintName) { ManagementScope scope = new ManagementScope(@"\root\cimv2"); scope.Connect();// Select Printers from WMI Object CollectionsManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Printer");string printerName = "";foreach (ManagementObject printer in searcher.Get()) { printerName = printer["Name"].ToString().ToLower();if (printerName.IndexOf(BindPrintName.ToLower()) > -1) {//foreach (var property in printer.Properties)//{// LogUtil.WriteLog(property.Name + ":" + property.Value);//}if (printer["WorkOffline"].ToString().ToLower().Equals("true")) {return false; }else{return true; } } }return false; }
打印机阻塞队列实现
这里主要是通过一个while循环来不停的获取打印机的状态,空闲时才会进行下一次打印,通过两个标志位来配合轮询的外部介入退出
FinishWait标志位是任务内部的标识,如果打印机检查到了错误状态则进行轮询退出
GlobalInfo.IsGlobalExist标志位是程序全局标识,如果界面上通知用户等待时间过长,可以进行人工手动干预退出
//检查打印机状态if (!CheckPrinter(PrintName)) {throw new PrintCheckException("打印机处于脱机状态"); } PrinterStatus State = GetPrinterPrinterStatus(PrintName);if (State == PrinterStatus.空闲) { }else if (State == PrinterStatus.打印 || State == PrinterStatus.预热) {//正在打印/预热时循环去查询打印机状态,如果变成了就绪就开始打印while (State != PrinterStatus.空闲 && !FinishWait && !GlobalInfo.IsGlobalExist) { State = GetPrinterPrinterStatus(PrintName);if (!CheckPrinter(PrintName)) { FinishWait = true;throw new PrintCheckException("打印机处于脱机状态"); }if (State == PrinterStatus.打印 || State == PrinterStatus.预热 || State == PrinterStatus.空闲) {if (State == PrinterStatus.空闲) { FinishWait = true; } }else{ FinishWait = true;throw new PrintCheckException("打印机状态错误,当前状态:" + State.ToString()); } }
到此,关于"如何用c#实现打印机脱机检查及阻塞打印"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
打印机
状态
脱机
检查
空闲
阻塞
c#
学习
标志
更多
标识
错误
帮助
循环
实用
接下来
两个
人工
任务
全局
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全复试资料完全版
网络技术双引领是什么意思
验收软件开发标准
水仙花数的存储过程数据库
实用网络技术学习
ping为什么不通服务器ip
互联网科技快报
文件管理支持服务器是什么
哪有软件开发的均
请换一个服务器
中风病临床数据库
服务器涨停
忻州市网络安全宣传
通信服务器软件开发
表名和数据库名可以重名吗
网络安全法新司法解释
快手的作品是服务器上的吗
MC服务器安达瑞亚
绝地求生服务器卡掉了
对校园网络安全的建议
淮南医院软件开发外包公司
网络安全活动公益广告
服务器cpu装到家用机上
软件开发技术合同享受免税政策吗
wlan添加新网络安全类型
文件连接服务器时出现问题
服务器托管服务协议
东莞微商软件开发平台
新华互联网科技学校是公办的吗
医院网络安全图解