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 メソッド

EnumeratedPrintQueueTypes 列挙体

MSDN によると、EnumeratedPrintQueueTypes には、メンバー値のビット単位の組み合わせを可能にする FlagsAttribute 属性があります。なので、NOT direct を何とか指定できるはずです。どうすればいいのですか?

私はこれをやろうとしましarrFlags(0) = Not System.Printing.EnumeratedPrintQueueTypes.DirectPrintingたが、結果は返されませんでした。明らかに間違っています。

では、flags 属性を操作して、直接印刷するすべてのプリンターを排除するにはどうすればよいでしょうか。

4

1 に答える 1

0

これはそれを行う1つの方法ですが、非常に洗練されていないようです:

    '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
于 2015-11-09T10:11:34.197 に答える