Сравнение 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. Это устраняет необходимость перебирать LocalPrintServerPrintQueueCollection,

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);
}

Если вам все еще нужно перебрать LocalPrintServerPrintQueueCollection Вы можете попробовать реализацию ниже.

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);
    }
}
Другие вопросы по тегам