求高手解答关于打印机的问题
现在程式使用网络打印机打印小票,但是现在要检测打印机是否可以正常打印,在网上找到了方法可以获取打印机的状态,但是获取的状态必须 打印一次才可以检测到打印是否正常,必须出纸以后才知道打印机是否正常运作。现在想要的是 在不出纸的情况下能风检测到打印机的缺纸和错误状态
目前使用的打印机是 EPSON TM-T88IV
程式是winfrom
现在使用的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Printing;
using System.Management;
namespace taihing_order.print
{
public class CSCPrintClass
{
/// <summary>
/// 打印机状态
/// </summary>
public enum PrinterStatus
{
其他状态 = 1,
未知,
空闲,
正在打印,
预热,
停止打印,
打印中,
离线
}
/// <summary>
/// 获取打印机的当前状态
/// </summary>
/// <param name="PrinterDevice">打印机设备名称</param>
/// <returns>打印机状态</returns>
public static PrinterStatus GetPrinterStat(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;
}
/// <summary>
/// 清除打印机队列
/// </summary>
/// <param name="PrinterName">打印机名称</param>
public static void ClearPrint(string PrinterName)
{
PrintServer localPrintServer = new LocalPrintServer();
PrintQueue pq = localPrintServer.GetPrintQueue(PrinterName);
pq.Refresh();
PrintJobInfoCollection allPrintJobs = pq.GetPrintJobInfoCollection();
foreach (PrintSystemJobInfo printJob in allPrintJobs)
{
printJob.Cancel();
}
}
}
}
//檢查打印機
public bool PrintStart(string name)
{
PrintDocument pd = new PrintDocument();
//实例化控制器,将无任何提示
pd.PrintController = new StandardPrintController();
//指定打印机
pd.PrinterSettings.PrinterName = name;
//设置边距
Margins margin = new Margins(20, 20, 20, 20);
pd.DefaultPageSettings.Margins = margin;
//纸张设置默认
PaperSize pageSize = new PaperSize("First custom size", getYc(58), 600);
pd.DefaultPageSettings.PaperSize = pageSize;
//打印事件设置
pd.PrintPage += new PrintPageEventHandler(this.printDocument2_PrintPage);
bool state = true; ;
try
{
if (CSCPrintClass.GetPrinterStat(name) != CSCPrintClass.PrinterStatus.未知 && name == Helper.smallPrintName)
{
//启动打印机开始打印
pd.Print();
if (CSCPrintClass.GetPrinterStat(name) == CSCPrintClass.PrinterStatus.正在打印)
{
//清除打印列表
CSCPrintClass.ClearPrint(name);
timer2.Stop();
}
else
{
state = false;
}
}
else
{
state = false;
}
}
catch (Exception ee)
{
state = false;
}
return state;
}
分不多,希望大神们帮帮忙 C# 打印机 winfrom --------------------编程问答-------------------- 除 --------------------编程问答--------------------
谢谢 --------------------编程问答-------------------- 没有人帮忙解答下吗?
补充:.NET技术 , C#