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(@"\root\cimv2");
            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);
            }
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM