Получить сведения об очереди печати для общего принтера
Я пытаюсь распечатать документ на общем принтере; мне нужно получить сведения об очереди печати. Следующий код всегда получает очередь из "Документа Microsoft XPS" как Число заданий =0. Но мой принтер по умолчанию настроен как "HP LaserJet P1505n"
LocalPrintServer server = new LocalPrintServer()
PrintQueueCollection queueCollection = server.GetPrintQueues();
PrintQueue printQueue = null;
foreach (PrintQueue pq in queueCollection)
{
Logger.LogInfo("PrintQueue1", "Printer1 Queue Name " + pq.FullName);
printQueue = pq;
numberOfJobs = printQueue.NumberOfJobs;
Logger.LogInfo("numberOfJobs1"+ numberOfJobs);
}
Как получить сведения об очереди печати с этого конкретного общего принтера? я попробовал также следовать
PrintServer server = new PrintServer(@"\\192.168.100.168\HP LaserJet P1505n");
но получил ошибку как:
Ошибка Win32: неверный синтаксис имени файла, имени каталога или метки тома
Что мне здесь не хватает?
2 ответа
Как получить сведения об очереди печати с этого конкретного общего принтера?
Попробуйте что-то вроде этого:
// string.Empty or null for local printers
string printServerName = @"\\server";
string printQueueName= "printer";
PrintServer ps = string.IsNullOrEmpty(printServerName)
// for local printers
? new PrintServer()
// for shared printers
: new PrintServer(printServerName);
PrintQueue pq = ps.GetPrintQueue(printQueueName);
Console.WriteLine(pq.FullName);
Console.WriteLine(pq.NumberOfJobs);
// output is printer uri (\\server\printer) and 0.
Также возможно использовать IP-адрес сервера (например, строку) вместо имени сервера.
string printServerName = @"\\192.168.1.111"; // for example
т.е.
для локального принтера PDFCreator set
string printServerName = null;
string printerName = "PDFCreator";
и для общего принтера P на сервере S установлено
string printServerName = @"\\S";
string printerName = "P";
Документация класса System.Printing.PrintServer на MSDN
Попробуй это:
var myServer = @"\\192.168.100.168";
С этим кодом:
// Create a PrintServer
// "theServer" must be a print server to which the user has full print access.
// var myServer = @"\\theServer"
PrintServer myPrintServer = new PrintServer(myServer);
// List the print server's queues
PrintQueueCollection myPrintQueues = myPrintServer.GetPrintQueues();
String printQueueNames = "My Print Queues:\n\n";
foreach (PrintQueue pq in myPrintQueues)
{
printQueueNames += "\t" + pq.Name + "\n";
}
Console.WriteLine(printQueueNames);
Console.WriteLine("\nPress Return to continue.");
Console.ReadLine();