2015-11-09 117 views
0

我需要一个不直接打印的打印机列表。获得一份直接打印的清单似乎相当容易。但如何做相反的事情呢?如何获取不直接打印的打印机列表?

Dim PrintServer As New SysPrint.PrintServer 
    Dim arrFlags(0) As SysPrint.EnumeratedPrintQueueTypes 
    arrFlags(0) = System.Printing.EnumeratedPrintQueueTypes.DirectPrinting 
    Dim QColl As SysPrint.PrintQueueCollection = PrintServer.GetPrintQueues(arrFlags) 

PrintServer.GetPrintQueues Method

EnumeratedPrintQueueTypes Enumeration

MSDN说,EnumeratedPrintQueueTypes有一个FlagsAttribute属性,允许其成员值的按位的组合。所以我应该能够以某种方式指定NOT。我该怎么做?

我试图做到这一点arrFlags(0) = Not System.Printing.EnumeratedPrintQueueTypes.DirectPrinting,但没有返回任何结果。很明显不正确。

那么,如何操作flags属性来消除所有打印机直接打印?

回答

0

这是为了做这件事,但它似乎非常不雅:

'get full list 
    Dim PrintServer As New SysPrint.PrintServer 
    Dim QColl As SysPrint.PrintQueueCollection = PrintServer.GetPrintQueues() 

    'get those not printing direct 
    Dim Qcoll2 As List(Of SysPrint.PrintQueue) = QColl.Where(Function(x) Not (x.IsDirect)).ToList 

    'select name only 
    Dim strList As List(Of String) = Qcoll2.Select(Function(x) x.Name).ToList 
相关问题