如何用c#实现打印机脱机检查及阻塞打印
发表于:2025-02-06 作者:千家信息网编辑
千家信息网最后更新 2025年02月06日,这篇文章主要介绍"如何用c#实现打印机脱机检查及阻塞打印",在日常操作中,相信很多人在如何用c#实现打印机脱机检查及阻塞打印问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答
千家信息网最后更新 2025年02月06日如何用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安全错误
数据库的锁怎样保障安全
鼎信云服务器注册状态显示未注册
清华大学网络安全股票
电脑数据库转储sql文件
魔兽世界更改默认服务器
2年级网络安全教育手抄报
梦幻世界独立服务器
自己家电脑能不能做游戏服务器
哈利波特好友不同服务器
德州服务器管理系统价格
用友数据库 备份
范坚网络安全
服务器就一块硬盘要做raid吗
网络安全大赛真正的冠军
福州源艺软件开发有限公司
定制软件开发知识产权
天津比较安全的服务器
携手共建网络安全PPT学生
数据库公式vl
服务器屏幕进场提示指令
数据库中如何导出idb格式文件
辽宁计算机网络技术排行
哈尔滨网络技术公司
奉贤区品质数据库服务商服务费
手写体下载软件开发
移动工程网络安全会议心得
魔兽世界正式服角色转移服务器
徐州营销软件开发项目
怎么接入国家产品图片数据库
保证数据库完整性和相容性
滴滴股东不知网络安全审查