比较PrintQueue以确定默认打印队列

本文关键字:默认 打印 队列 PrintQueue 比较 | 更新日期: 2023-09-27 18:07:57

由于这个问题的帮助,我正在检索默认打印队列。我还能够确定DefaultPrintQueue

但是如何正确地确定打印队列列表中的哪个打印队列等于DefaultPrintQueue呢?

我试过:

var dq = LocalPrintServer.GetDefaultPrintQueue();
foreach(PrintQueue pq in pqcOnLocalServer)
{
    if(pq.Equals(dq))
    {
        System.Console.WriteLine("Found default"); 
    }
}

,但这两个对象显然不会相同。然后我假设我可以将每个PrintQueue的属性与默认值进行比较,但是应该使用什么属性来确定,100%,两个PrintQueue引用相同的PrintQueue ?

比较PrintQueue以确定默认打印队列

尝试使用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);
    }
}

这个问题可能在Expert Exchange或Server Exchange上做得很好。我发现,打印服务器不允许服务器上的打印机具有打印机服务器上已经存在的名称。话虽如此,每个服务器上的打印机必须有一个唯一的名称。

话虽如此,用户必须小心,不仅要比较打印机名称以确保它们是唯一的,而且还必须比较它们所在的打印机服务器。例如,在枚举连接的打印机时。一台计算机可以连接到两个打印服务器,其中有一个''PRNTSRVR1'HQ_LaserJet01''PRNTSRVR2'HQ_LaserJet01;所以检查连接的服务器也很重要。