我有一个需要打印票的应用程序。每张票必须是唯一的。该应用程序是 Windows 窗体,完全用 C# 编写。对于我们的应用,我们使用的是三星 ML-2525 激光单色打印机。
流程基本上如下,操作员选择一个产品/票(这是唯一的),然后按下一个按钮来做两件事:
- 连接到数据库并根据使用情况更新产品
- 打印票证(使用 System.Drawing 和 GDI+ 完成)
由于某种原因,每隔一段时间,需要打印的图像不会发送到打印机。这是一个罕见的情况,但它发生了。
我尝试使用 Win32_Printer ( http://msdn.microsoft.com/en-us/library/Aa394363 ) 连接到打印机,但无法获取当前打印机的状态(在线、离线、碳粉不足、卡纸, ETC)。我只能检查打印机是否存在以及是否正确安装了纸张尺寸。我尝试了类似于以下的代码,但没有成功
private string MonitorPrintJobWmi()
{
var jobMessage = String.Empty;
var scope = new ManagementScope(ManagementPath.DefaultPath);
scope.Connect();
var selectQuery = new SelectQuery { QueryString = @"select * from Win32_PrintJob" };
var objSearcher = new ManagementObjectSearcher(scope, selectQuery);
var objCollection = objSearcher.Get();
foreach (var job in objCollection)
{
if (job != null)
{
jobMessage += String.Format("{0} \r\n", job["Name"].ToString());
jobMessage += String.Format("{0} \r\n", job["JobId"].ToString());
_jobId = Convert.ToInt32(job["JobId"]);
jobMessage += String.Format("{0} \r\n", job["JobStatus"].ToString());
jobMessage += String.Format("{0} \r\n", job["Status"].ToString());
}
}
return jobMessage;
}
我试图获取打印机的 API,但我无法掌握它。顺便说一句,打印机的软件确实会在 Windows 工具栏中显示不同的错误。
我的问题是,是否有人可以引导我了解如何连接打印机并检查打印是否成功。
另外,如果有人知道我可以在其中完成此操作的其他特定打印机(即更改硬件),那将很有帮助。
谢谢,