4 changed files with 231 additions and 2 deletions
@ -0,0 +1,203 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Drawing.Printing; |
|||
using System.Linq; |
|||
using System.Management; |
|||
using System.Printing; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
using System.Windows.Forms; |
|||
|
|||
namespace formula_manage.UserClass |
|||
{ |
|||
internal class UserPrint |
|||
{ |
|||
/// <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);
|
|||
} |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue