原文: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); } }
