3

我一直在尝试使用System.Drawing.Printing;以获取网络打印机的队列状态。

我可以检索打印机的属性,但我似乎无法真正获得队列状态。

这是我迄今为止尝试过的:

PrinterSettings ps = new PrinterSettings();
ps.PrinterName = "ES5461 MFP(PCL)"; // Load the appropriate printer's setting

从那里我可以看到打印机是有效ps.IsValid的,true但我不能再进一步了。

我也尝试过使用它System.Management来检索状态,但我只知道如何转储信息并且也没有队列信息。

string printerName = "ES5461";
string query = string.Format("SELECT * from Win32_Printer WHERE Name LIKE '%{0}%'", printerName);

ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementObjectCollection coll = searcher.Get();

foreach (ManagementObject printer in coll)
{
    foreach (PropertyData property in printer.Properties)
    {
        Console.WriteLine(string.Format("{0}: {1}", property.Name, property.Value));
    }
}

您知道使用任何 .dll 检索队列状态(文档数)的任何方法吗?

4

1 回答 1

3

感谢 Nissim,我可以解决它:

var printServer = new PrintServer();
var myPrintQueues = printServer.GetPrintQueues(new[] { EnumeratedPrintQueueTypes.Local, EnumeratedPrintQueueTypes.Connections });

foreach (PrintQueue pq in myPrintQueues)
{
    pq.Refresh();
    if (!pq.Name.ToLower().Contains("es5461")) continue;  
    PrintJobInfoCollection jobs = pq.GetPrintJobInfoCollection();
    foreach (PrintSystemJobInfo job in jobs)
    {
        var aux = job;
    }// end for each print job    
}// end for each print queue

正如您所看到的,使用PrintServer( System.Printing) 与PrintQueueNissim 建议的结合,我实际上可以访问队列信息。

于 2015-06-16T10:10:55.233 回答