zoukankan      html  css  js  c++  java
  • C# 打印机连接状态判断

    原文:https://www.cnblogs.com/Old-Fish/p/6258118.html

    /// <summary>
            /// 判断是否连接打印机
            /// </summary>
            public bool CheckPrinter()
            {
                //取得默认打印机名
                PrintDocument pdoc = new PrintDocument();
                string printerName1 = pdoc.PrinterSettings.PrinterName;
    
                ManagementScope scope = new ManagementScope(@"
    ootcimv2");
                scope.Connect();
    
                // Select Printers from WMI Object Collections
                ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Printer");
    
                string printerName = "";
                foreach (ManagementObject printer in searcher.Get())
                {
                    printerName = printer["Name"].ToString().ToLower();
                    if (printerName.IndexOf(printerName1.ToLower()) > -1)
                    {
    
                        if (printer["WorkOffline"].ToString().ToLower().Equals("true"))
                        {
                            switch (MessageBox.Show("默认打印机未连接或出错", "警告", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Error))
                            {
                                case DialogResult.Retry:
                                    CheckPrinter();
                                    break;
                            }
                            return false;
                            // printer is offline by user
    
                        }
                        else
                        {
                            // printer is not offline
    
                            return true;
                        }
                    }
                }
                switch (MessageBox.Show("默认打印机未连接或出错", "警告", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Error))
                {
                    case DialogResult.Retry:
                        CheckPrinter();
                        break;
                }
                return false;
            }
    
            /// <summary>
            /// 判断打印机状态,传Exception
            /// </summary>
            /// <param name="ex">Exception</param>
            public void ErrerPrint(Exception ex)
            {
                PrintQueue pq = LocalPrintServer.GetDefaultPrintQueue();
                string PrintStaticText = "";
                bool isPrintErrer = false;
    
    
                switch (pq.QueueStatus)
                {
                    case PrintQueueStatus.Busy:
                        PrintStaticText = "打印机正忙";
                        isPrintErrer = true;
                        break;
                    case PrintQueueStatus.DoorOpen:
                        PrintStaticText = "打印机上的门已打开";
                        isPrintErrer = true;
                        break;
                    case PrintQueueStatus.Error:
                        PrintStaticText = "由于错误情况,打印机无法打印。";
                        isPrintErrer = true;
                        break;
                    case PrintQueueStatus.IOActive:
                        PrintStaticText = "打印机正在与打印服务器交换数据";
                        isPrintErrer = true;
                        break;
                    case PrintQueueStatus.Initializing:
                        PrintStaticText = "打印机正在初始化";
                        isPrintErrer = true;
                        break;
                    case PrintQueueStatus.ManualFeed:
                        PrintStaticText = "打印机正在等待用户将打印介质放入手动送纸盒";
                        isPrintErrer = true;
                        break;
                    case PrintQueueStatus.NoToner:
                        PrintStaticText = "打印机墨粉用完";
                        isPrintErrer = true;
                        break;
                    case PrintQueueStatus.None:
                        PrintStaticText = "未指定状态。";
                        isPrintErrer = true;
                        break;
                    case PrintQueueStatus.NotAvailable:
                        PrintStaticText = "状态信息不可用";
                        isPrintErrer = true;
                        break;
                    case PrintQueueStatus.Offline:
                        PrintStaticText = "打印机处于脱机状态。";
                        isPrintErrer = true;
                        break;
                    case PrintQueueStatus.OutOfMemory:
                        PrintStaticText = "打印机无可用内存";
                        isPrintErrer = true;
                        break;
                    case PrintQueueStatus.OutputBinFull:
                        PrintStaticText = "打印机的输出纸盒已满";
                        isPrintErrer = true;
                        break;
                    case PrintQueueStatus.PagePunt:
                        PrintStaticText = "打印机不能打印当前页";
                        isPrintErrer = true;
                        break;
                    case PrintQueueStatus.PaperJam:
                        PrintStaticText = "打印机卡纸";
                        isPrintErrer = true;
                        break;
                    case PrintQueueStatus.PaperOut:
                        PrintStaticText = "打印机中没有或已用完当前打印作业所需的纸张类型";
                        isPrintErrer = true;
                        break;
                    case PrintQueueStatus.PaperProblem:
                        PrintStaticText = "打印机中的纸张导致未指定的错误情况";
                        isPrintErrer = true;
                        break;
                    case PrintQueueStatus.Paused:
                        PrintStaticText = "打印队列已暂停";
                        isPrintErrer = true;
                        break;
                    case PrintQueueStatus.PendingDeletion:
                        PrintStaticText = "打印队列正在删除打印作业";
                        isPrintErrer = true;
                        break;
                    case PrintQueueStatus.PowerSave:
                        PrintStaticText = "打印机处于节能模式";
                        isPrintErrer = true;
                        break;
                    case PrintQueueStatus.Printing:
                        PrintStaticText = "设备正在打印";
                        isPrintErrer = true;
                        break;
                    case PrintQueueStatus.Processing:
                        PrintStaticText = "设备正在执行某种工作,如果此设备是集打印机、传真机和扫描仪于一体的多功能设备,则不需要打印";
                        isPrintErrer = true;
                        break;
                    case PrintQueueStatus.ServerUnknown:
                        PrintStaticText = "打印机处于错误状态";
                        isPrintErrer = true;
                        break;
                    case PrintQueueStatus.TonerLow:
                        PrintStaticText = "打印机中只剩下少量墨粉";
                        isPrintErrer = true;
                        break;
                    case PrintQueueStatus.UserIntervention:
                        PrintStaticText = "打印机要求通过用户操作来更正错误情况";
                        isPrintErrer = true;
                        break;
                    case PrintQueueStatus.Waiting:
                        PrintStaticText = "打印机正在等待打印作业";
                        isPrintErrer = true;
                        break;
                    case PrintQueueStatus.WarmingUp:
                        PrintStaticText = "打印机正在预热";
                        isPrintErrer = true;
                        break;
                }
    
                if (isPrintErrer)
                {
                    WriteLog.SetString(PrintStaticText);
                    MessageBox.Show(PrintStaticText, "警告", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                if (ex.Message == "The net printer is unavailable.")
                {
              
    
                    MessageBox.Show("网络打印机不可用", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    WriteLog.SetString(ex.Message);
                }
                else
                {
                    WriteLog.SetException(ex);
                }
            }
  • 相关阅读:
    SQL创建的几种存储过程
    关于freemaker的一点使用技巧
    freemaker时间格式转换,精确到毫秒
    递归算法
    网易开发工程师编程题 比较重量 Java
    JavaScript tasks, microtasks, queues and schedules
    1000分以下局目标
    Lua简介
    浅谈Wireshark的基本操作
    adb操作
  • 原文地址:https://www.cnblogs.com/zhang1f/p/11409208.html
Copyright © 2011-2022 走看看