Сравнение PrintQueue для определения очереди печати по умолчанию
Я получаю очереди печати по умолчанию благодаря помощи этого вопроса. Я также могу определить DefaultPrintQueue
Но как правильно определить, какая очередь печати в списке очередей печати равна DefaultPrintQueue
?
Я пробовал:
var dq = LocalPrintServer.GetDefaultPrintQueue();
foreach(PrintQueue pq in pqcOnLocalServer)
{
if(pq.Equals(dq))
{
System.Console.WriteLine("Found default");
}
}
но два объекта, очевидно, не будут одинаковыми. Я тогда предположил бы, что мог бы сравнить свойства каждого PrintQueue
со значением по умолчанию, но какие свойства следует использовать, чтобы определить, 100%, что два PrintQueue
с относятся к тому же PrintQueue
?
2 ответа
Этот вопрос мог бы быть успешным на Expert Exchange или Server Exchange. Я обнаружил, что сервер печати не разрешает принтеры на сервере, имена которых уже существуют на сервере печати. При этом принтер должен иметь уникальное имя для каждого сервера.
При этом пользователь должен быть осторожным, чтобы не только сравнивать имена принтеров, чтобы убедиться, что они уникальны, но и сравнивать сервер печати, на котором они находятся. Например, при перечислении подключенных принтеров. Компьютер может быть подключен к двум серверам печати, где есть \\PRNTSRVR1\HQ_LaserJet01
а также \\PRNTSRVR2\HQ_LaserJet01
; так что проверка подключенного сервера тоже важна.
Попробуйте и используйте LocalPrintServer.DefaultPrintQueue
свойство, чтобы получить очередь печати по умолчанию и сравнить PrintQueue.FullName. Это устраняет необходимость перебирать LocalPrintServer
PrintQueueCollection
,
LocalPrintServer printServer = new LocalPrintServer(PrintSystemDesiredAccess.AdministrateServer);
PrintQueue pq = printServer.DefaultPrintQueue;
PrintQueue dq = LocalPrintServer.GetDefaultPrintQueue();
if (dq != null && pq.FullName.Equals(dq.FullName))
{
Console.WriteLine("Found default print Queue: {0}", dq.FullName);
}
Если вам все еще нужно перебрать LocalPrintServer
PrintQueueCollection
Вы можете попробовать реализацию ниже.
LocalPrintServer printServer = new LocalPrintServer(PrintSystemDesiredAccess.AdministrateServer);
PrintQueue dq = LocalPrintServer.GetDefaultPrintQueue();
foreach (PrintQueue pq in printServer.GetPrintQueues())
{
if (dq != null && pq.FullName.Equals(dq.FullName))
{
Console.WriteLine("Found default print Queue: {0}", dq.FullName);
}
}