c#:如何使用winspool_drv监视打印作业

时间:2010-09-05 05:31:46

标签: c# printing

最近我正在制作系统监控工具。为此,我需要一个类来监视打印作业。 例如,当打印开始时,是否成功,有多少页。 我知道我可以使用winspool.drv来做到这一点。但不管怎么样。我已经广泛搜索但没有运气。任何代码/建议都可能非常有用。 感谢。

1 个答案:

答案 0 :(得分:2)

我不知道winspool.drv,但您可以使用WMI来获取打印机的状态。以下是使用Win32_Printer

的示例
PrintDialog pd = new PrintDialog();
pd.ShowDialog();
PrintDoc.PrinterSettings = pd.PrinterSettings;
PrintDoc.PrintPage += new PrintPageEventHandler(PrintDoc_PrintPage);
PrintDoc.Print();

object status = Convert.ToUInt32(9999);
while ((uint)status != 0) // 0 being idle
{
    ManagementObjectSearcher mos = new ManagementObjectSearcher("select * from Win32_Printer where Name='" + pd.PrinterSettings.PrinterName + "'");
    foreach (ManagementObject service in mos.Get())
    {
    status = service.Properties["PrinterState"].Value;
    Thread.Sleep(50);
    }
}

如果您不使用PrintDialog对象(选择打印机),您可以运行WMI查询,它将返回系统中的所有打印机。