0

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

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

我试过了:

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

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

4

2 回答 2

0

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

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

于 2015-03-30T14:47:54.723 回答
0

尝试使用该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);
    }
}
于 2014-06-10T09:38:13.430 回答