代码之家  ›  专栏  ›  技术社区  ›  Barun

C:如何使用Winspool_DRV监控打印作业

  •  1
  • Barun  · 技术社区  · 15 年前

    最近我正在制作一个系统监控工具。为此,我需要一个班来监控打印作业。 例如,当打印开始时,它是否成功,有多少页。 我知道我可以用winspool.drv来完成。但不该怎么做。我搜了很多遍,但运气不好。任何代码/建议都可能非常有用。 谢谢。

    1 回复  |  直到 15 年前
        1
  •  2
  •   Jack B Nimble    15 年前

    我不知道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查询,它将返回系统中的所有打印机。