Использование System.Drawing.Printing для получения статуса очереди

Я пытался использовать 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?

1 ответ

Решение

Благодаря 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) в сочетании с PrintQueue как предположил Ниссим, я могу получить доступ к информации об очереди.

Другие вопросы по тегам