如何用c#实现打印机脱机检查及阻塞打印
发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,这篇文章主要介绍"如何用c#实现打印机脱机检查及阻塞打印",在日常操作中,相信很多人在如何用c#实现打印机脱机检查及阻塞打印问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答
千家信息网最后更新 2024年11月26日如何用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安全错误
数据库的锁怎样保障安全
消防工程师和网络技术哪个好
部队网络安全教育做法
什么是材料数据库
中国免费网站服务器视频教程
金融科技和金融互联网的区别
工业园区专业软件开发口碑推荐
软件开发云计算哪个好
即时通讯软件开发信息网
proteus软件开发语言
d0905计算机网络技术
2018网络安全调查报告
物理服务器和云服务器的价格
cbm数据库中的作用
破解全国中级经济师数据库
宁波象山小型企业服务器
网络安全年龄对照表
支付平台对服务器的选择注意事项
家庭怎么做一个服务器
佛山考试软件开发电话
软件的网络安全风险评估
静态页面添加数据库
嘉定区品质网络技术采购信息
数据库美国大选最新票数
java不能连接数据库
苹果7查找无法连接服务器怎么办
河北常见软件开发资费
广电网络安全培训机构
数据库审计本地操作
win12系统服务器版
网页设计和软件开发区别